Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 18.02.2018
Сообщений: 40

Быстрая сортировка(одинаковые элементы)

03.03.2020, 18:36. Показов 885. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Вопрос по быстрой сортировке, если два числа одинаковые то не всегда корректно выводит. Подскажите, куда копать?

Фото

Кликните здесь для просмотра всего текста
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
#include <iostream>
#include <windows.h>
#include <conio.h>
 
using namespace std;
void qSort(int a[], int l, int r, int n)
{   int i=l, j=r, m = a[(l+r)/2];           // -- элемент посередине массива --
    do
    {
        for(; a[i]< m; i++);
        for(; a[j]> m; j--);
        //cout << i << "-" << a[i] << "; " << j << "-" << a[j] << "; m= " << m << endl;
        if(i < j && a[i] != a[j])
        {
            cout << "Меняем " << a[i] << " " << a[j] << endl;
            swap(a[i],a[j]);
            for(int k = 0; k < n; k++) cout<<a[k]<<" ";
            cout<<endl;
            system("pause");
        }else
        {
            i++;
            j--;
        }
    }while(i < j);
    if(l<j) qSort(a,l,j,n);
    if(i<r) qSort(a,i,r,n);
}
 
 
 
int main()
{
    setlocale(LC_ALL, "Russian");
    int A[9]={3,8,4,10,2,6,4,3,12};
    //int A[9]={8,5,78,3,2,5,8,3,23};
    cout << "Исходный массив: " << '\n';
    auto print = [&A]()
    {   for(int i =0; i < 9; i++)
        {
        cout << A[i] << " ";
        }
        cout << '\n';
    };
    print();
    //cout << "Для начала сортировки нажмите любую клавишу." << endl << endl;
    system("pause");
    qSort(A,0,8,9);
    cout << "Получился массив: ";
    print();
    return 0;
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
03.03.2020, 18:36
Ответы с готовыми решениями:

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

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

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

4
Эксперт CЭксперт С++
 Аватар для liv
5120 / 4574 / 855
Регистрация: 07.10.2015
Сообщений: 9,462
03.03.2020, 19:38
Umbetov, легче написать заново
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
void qSort(int a[], int l, int r)
{
    int i, j, p;
    i = l;
    j = r;
    while (i != j) 
    {
        if ((a[i] > a[j]) ^ (i > j)) 
        {
            swap(a[i], a[j]);
 
            p = i;
            i = j;
            if (p < j)
                j = p + 1; 
            else 
                j = p - 1;
        }
        else {
            if (i < j)
                j--; 
            else 
                j++;
        };
    };
 
    if (l < i - 1) 
        qSort(a, l, i - 1);
    if (i + 1 < r) 
        qSort(a, i + 1, r);
}
Без параметра n
0
0 / 0 / 0
Регистрация: 18.02.2018
Сообщений: 40
03.03.2020, 21:53  [ТС]
Код это хорошо) Мне бы ошибки и пути исправления у себя найти. Не будет же за менять кто то писать постоянно. n использовал потому что потом надо будет шаги выводить типа что где меняется а так как функция рекурсивная, из нее не вариант взять размер.
0
Эксперт CЭксперт С++
 Аватар для liv
5120 / 4574 / 855
Регистрация: 07.10.2015
Сообщений: 9,462
03.03.2020, 22:21
Umbetov, хорошо, посмотрю завтра более внимательно Ваш код
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
04.03.2020, 10:15
Цитата Сообщение от Umbetov Посмотреть сообщение
Код это хорошо) Мне бы ошибки и пути исправления у себя найти. Не будет же за менять кто то писать постоянно. n использовал потому что потом надо будет шаги выводить типа что где меняется а так как функция рекурсивная, из нее не вариант взять размер.
Во-первых, i и j там надо сравнивать нестрогим неравенством - if(i <= j) }while(i <= j);
Во-вторых - алгоритм быстрой сортироки прекрасно работает с одинаковыми значениями, ничего специально делать не надо
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
if (i <= j) // && a[i] != a[j])
{
    cout << "Меняем " << a[i] << " " << a[j] << endl;
    
    swap(a[i++], a[j--]);
 
    for (int k = 0; k < n; k++) cout << a[k] << " ";
    cout << endl;
    system("pause");
}
//else
//{
//  i++;
//  j--;
//}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
04.03.2020, 10:15
Помогаю со студенческими работами здесь

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

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

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

Сортировка Хоара / Быстрая сортировка
Доброго времени суток. Написал реализацию алгоритма быстрой сортировки. void SortHhoar(int *arr,int f,int l)//Хоара { int mid = (f...

Быстрая сортировка
Смотрел в тему посвященной быстрой сортировке, и не совсем понял. написал подобный код. Хотелось бы наиболее подробных комментариев, за...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru