С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.92
Asdf
1 / 1 / 0
Регистрация: 18.03.2012
Сообщений: 110
#1

Возникли трудности с функцией быстрой сортировки qsort - C++

09.05.2012, 21:59. Просмотров 1571. Ответов 23
Метки нет (Все метки)

Добрый вечер. Есть массив прямоугольников со своей высотой и шириной, надо отсортировать отдельно по высоте, ширине и площади прямоугольника. Так вот, основное есть, а вот с сортировкой заминка вышла. Вроде всё как надо написал, но в итоге выводит бред. Подскажите, где я напорол косяков. Может в самой функции сравнения или в описании функции qsort?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
const int n = 10;
 
struct rectangle
{    
    double width, height;
};
int compare(const void * a, const void * b)
{
  if (*(int *)a < *(int *)b) return -1; 
  if (*(int *)a > *(int *)b) return 1; 
  return 0;
}
 
 
int main()
{
    setlocale(0, "Russian");
    int i;
    srand((unsigned)time(NULL));
    rectangle *arr_rectangle = new rectangle[10];
    for (i=0; i<n; i++)
    {
        arr_rectangle[i].height=rand()%10+1;
        arr_rectangle[i].width=rand()%10+1;
        cout << arr_rectangle[i].height << "\t" << arr_rectangle[i].width << endl;
    }
    qsort(arr_rectangle, 10, sizeof(arr_rectangle[i].height), compare);
    cout << "Отсортированный массив по высоте \n" << arr_rectangle[i].height << " " << endl;;
    cout << "Press Any Key to Exit..";
    getch();
    return 0;
    
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.05.2012, 21:59
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Возникли трудности с функцией быстрой сортировки qsort (C++):

Выполнить сортировку массива с помощью стандартной функции быстрой сортировки qsort - C++
Здравствуйте! прошу вас о помощи! помогите пожалуйста с программой! &quot;Выполнить сортировку массива с помощью стандартной функции быстрой...

Выполнить сортировку массива с помощью стандартной функции быстрой сортировки qsort - C++
2. Выполнить сортировку массива с помощью стандартной функции быстрой сортировки qsort, прототип которой находится в заголовочном файле...

Возникли трудности( - C++

Возникли трудности с задачей - C++
Имеется задача : Родители Пети Торопыжкина затеяли ремонт. Однажды его послали в строительный магазин, чтобы купить c кг цементной смеси....

Возникли огромные трудности с задачей. (С++) - C++
Возникли огромные трудности с данной программой. Помогите, если есть у кого-нибудь желание. Ближе к задаче: нам дан обычный текстовый...

Пример быстрой сортировки массива строк и сортировки методом выбора - C++
Добрый вечер. Скиньте пожалуйста пример быстрой сортировки массива строк и сортировки массива строк методом выбора. Очень срочно надо,...

23
Asdf
1 / 1 / 0
Регистрация: 18.03.2012
Сообщений: 110
13.05.2012, 01:32  [ТС] #16
Не не, мне не сам код, а принцип )))
0
grizlik78
Эксперт С++
1972 / 1465 / 122
Регистрация: 29.05.2011
Сообщений: 3,033
13.05.2012, 01:35 #17
Ну мне непонятно, что тут может быть непонятного Разные прямоугольники имеют разную площадь. Вот и располагаем их так, чтобы в начале были прямоугольники с маленькой площадью, а в конце с большой. Площадь такая же характеристика, как и размеры сторон.
0
Asdf
1 / 1 / 0
Регистрация: 18.03.2012
Сообщений: 110
13.05.2012, 01:36  [ТС] #18
Получается, если у меня в массиве 5 элементов и во втором массиве 5, то тогда берётся каждый элемент из массива умножается и выводится как площади и по этим площадям идёт сортировка? )
0
grizlik78
Эксперт С++
1972 / 1465 / 122
Регистрация: 29.05.2011
Сообщений: 3,033
13.05.2012, 01:38 #19
Ну, как бы да. Тут, кстати, получается, что требуется столько умножений, сколько будет сравнений. Так что в некоторых может оказаться выгодным хранить площадь наряду с размерами, а не вычислять её каждый раз.
0
Asdf
1 / 1 / 0
Регистрация: 18.03.2012
Сообщений: 110
13.05.2012, 01:47  [ТС] #20
Так, получаеться всё окей, тока не совсем красиво. Хочется, чтобы площадь выводилась после сторон, но она сразу подсчитывает 2 точки и выводиться. И очень не красиво получаеться Сделано так, как лучше переделать?
C++
1
2
3
4
5
6
7
8
for (i=0; i<n; i++)
    {
        arr_rectangle[i].width=rand()%10+1;
        arr_rectangle[i].height=rand()%10+1;
        cout << arr_rectangle[i].height << "\t" << arr_rectangle[i].width << endl;
        arr_rectangle[i].area=arr_rectangle[i].width*arr_rectangle[i].height;
        cout << arr_rectangle[i].area << "" << endl;
    }
0
grizlik78
Эксперт С++
1972 / 1465 / 122
Регистрация: 29.05.2011
Сообщений: 3,033
13.05.2012, 01:56 #21
Цитата Сообщение от Asdf Посмотреть сообщение
но она сразу подсчитывает 2 точки и выводиться
Нихт ферштейн ничего совсем Может в строке 6 заменить endl на "\t"? Или что?
1
Asdf
1 / 1 / 0
Регистрация: 18.03.2012
Сообщений: 110
13.05.2012, 21:58  [ТС] #22
6 6
36
5 4
20
2 1
2

Вот так у меня выводится, а хочеться, чтобы сначала были стороны, а потом тока площадь считалась

Добавлено через 5 минут
А всё окей ,решилось )) С форматированием поигрался и вуаля.

Добавлено через 19 часов 53 минуты
Появился вопрос, как внести в структуру rectangle оператор <, чтобы прямоугольник с меньшей площадью считался меньшим прямоугольником?
C++
1
2
3
4
struct rectangle
{    
    double width, height, area;
};
0
grizlik78
Эксперт С++
1972 / 1465 / 122
Регистрация: 29.05.2011
Сообщений: 3,033
14.05.2012, 22:02 #23
C++
1
2
3
4
5
6
7
8
struct rectangle
{    
    double width, height, area;
    bool operator < (rectangle const& r) const
    {
        return area < r.area;
    }
};
Но такое сравнение неочевидное и я вряд ли так делал бы. Скорее добавил бы функцию, вроде IsAreaLessThan().
0
Asdf
1 / 1 / 0
Регистрация: 18.03.2012
Сообщений: 110
14.05.2012, 22:07  [ТС] #24
Блин... Создал новую тему Не понятно с сортировкой!, с описанием проблемы... Глянь плз, чёт я туплю немного с сортировками...
0
14.05.2012, 22:07
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.05.2012, 22:07
Привет! Вот еще темы с ответами:

работа с функцией qsort - C++
вот есть код который отделает слова и записывает в массив и надо их отсортировать по возрастанию длины как использовать qsort в данном...

задание с функцией qsort(). язык C - C++
задание: составить программу, которая обрабатывает следущие данные про наличие вычислительной техники: название подраздела, название...

Пожскажите с функцией sort() или qsort() - C++
Есть программа, которая генерирует случайно 10 неповторяющихся чисел от 1 до 10 и записывает их в массив array, вот код: ...

исправление функции qsort сортировки матрицы - C++
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;math.h&gt; #include &lt;conio.h&gt; #include &lt;locale.h&gt; #include &lt;algorithm&gt; ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
24
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.