Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
10 / 10 / 1
Регистрация: 13.12.2014
Сообщений: 87
1

Быстрая сортировка

15.09.2015, 22:47. Показов 888. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте. Ребята, очень нужна помощь. Есть функция быстрой сортировки, ей надо упорядочить массив из рандомных чисел - строки по возрастанию. Сортирует правильно - проблема в подсчете сравнений (comparison) в процессе сортировки. Не могу понять, как правильно нужно расположить инкременты. Например при сортировке массива из любого кол-ва строк (N) и 2 столбцов (M), если первый элемент больше второго в строчке, то сравнений будет ноль. Не поможете? Заранее спасибо.

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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
void qsort(int *arr, int left, int right, unsigned long long &comparison, unsigned long long &shift)
{
    int l = left;
    int r = right;
    int temp = 0;
    int mid = arr[(l + r) / 2];
 
    while (l <= r)
    {
        while ((arr[l] < mid) && (l <= right))
        {
            comparison++;
            l++;
        }
        while ((arr[r] > mid) && (r >= left))
        {
            comparison++;
            r--;
        }
 
        if (l <= r)
        {
            if (l < r)
            {
                shift++;
            }
            temp = arr[l];
            arr[l] = arr[r];
            arr[r] = temp;
            l++;
            r--;
        }
    }
 
    if (r > left)
    {
        qsort(arr, left, r, comparison, shift);
    }
 
    if (l < right)
    {
        qsort(arr, l, right, comparison, shift);
    }
}
 
.........................................................................................
 
///////////////
    // Quicksort //
    ///////////////
 
    for (int j = 0; j < M; j++)
    {
        int *pointer = &arr[j*N];
        qsort(pointer, 0, N - 1, comparison, shift);
    }
 
    printf("\n\n");
    printf("Quicksort:");
    printf("\n");
    for (int i = 0; i < M; i++)
    {
        printf("\n");
        for (int j = 0; j < N; j++)
        {
            printf("%4i ", arr[i*N + j]);
        }
    }
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.09.2015, 22:47
Ответы с готовыми решениями:

Быстрая сортировка(сортировка Хоара). Отсортировать фрагмент массива
Мне нужно отсортировать фрагмент массива, расположенный между первым и последним отрицательным...

Быстрая сортировка (сортировка Хоара) для связных списков
есть у кого готовый алгоритм? или подскажите как реализовать

Сортировка Слиянием vs Быстрая Сортировка - что лучше
Народ, помогите разобраться какой из методов сортировки лучше &quot;Сортировка Слиянием&quot; или &quot;Быстрая...

Быстрая сортировка (сортировка методом Хоара)
Ввести массив x1,x2,...,x20 в диапазоне . Требуется расположить отрицательные элементы в порядке...

3
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,169
Записей в блоге: 10
15.09.2015, 23:08 2
А shift - это что такое?
0
10 / 10 / 1
Регистрация: 13.12.2014
Сообщений: 87
15.09.2015, 23:29  [ТС] 3
castaway, shift - это перестановка. Но не суть важно, так как с ней вроде проблем нет.
0
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,169
Записей в блоге: 10
15.09.2015, 23:32 4
Тебе необходимо переформировать цикл где происходит подсчет сравнений.
Переделай его на бесконечный. При выполнении условий выходи через break.
Пробуй. Показывай что получилось. Подскажу.
0
15.09.2015, 23:32
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.09.2015, 23:32
Помогаю со студенческими работами здесь

C/C++ FAQ :: Быстрая сортировка (сортировка Хоара)
Вопрос, скорее академический, по мотивам реализации. Вот в faq приведена реализация этого метода...

Сортировка расчёской и быстрая сортировка
В файле in.txt записана последовательность целых чисел. Заданными методами отсортировать числа и...

Сортировка Хоара / Быстрая сортировка
Доброго времени суток. Написал реализацию алгоритма быстрой сортировки. void SortHhoar(int...

Быстрая сортировка
Что нужно исправить? #include &quot;stdafx.h&quot; #include &lt;iostream&gt; using namespace std; template...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru