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

Быстрая сортировка (сортировка Хоара) для связных списков

19.06.2014, 13:04. Показов 7909. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
есть у кого готовый алгоритм? или подскажите как реализовать
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
19.06.2014, 13:04
Ответы с готовыми решениями:

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

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

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

9
Котовчанин
942 / 482 / 200
Регистрация: 16.02.2010
Сообщений: 3,338
Записей в блоге: 35
19.06.2014, 13:06
Алгоритмы сортировок
0
 Аватар для Kuzia domovenok
4268 / 3327 / 926
Регистрация: 25.03.2012
Сообщений: 12,531
Записей в блоге: 1
19.06.2014, 13:17
так же как и для массивов.
только там для разбиения данных на две части лучше не обменивать элементы в цикле, а формировать как бы два новых списка из элементов старых, потому что операции удаления/добавления (особенно в конец) для списков идут быстрее, чем операции обмена
0
0 / 0 / 0
Регистрация: 24.04.2014
Сообщений: 31
19.06.2014, 16:58  [ТС]
То есть, я беру например первый элемент списка, делаю его опорным, затем делю список на 2, и в одну сторону меньше опорного, в другую больше?
0
 Аватар для Kuzia domovenok
4268 / 3327 / 926
Регистрация: 25.03.2012
Сообщений: 12,531
Записей в блоге: 1
20.06.2014, 02:27
Это и есть оперделение "быстрой сортировки"! Я же говорю о том, что, применяя её к спискам, для разбиения на две половины нужно не переставлять элементы местами, а создавать "как-бэ два новых списка" путём добавления в них элементов из оригинала и далее уже сортировать их.
Как-то так.
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
#include <iostream>
#include <cstdlib>
#include <ctime>
 
struct ListItem
{
    int key;
    ListItem *next;
};
ListItem* Key_Push_Front(ListItem* Start, int newKey)
{
    ListItem* tNew = new ListItem;
    tNew->key = newKey;
    tNew->next = Start;
    return tNew;
}
inline ListItem* Node_Push_Front(ListItem* Start, ListItem* newNode)
{
    newNode->next = Start;
    return newNode;
}
void Print_List(ListItem* MyList)
{
    for (ListItem* it = MyList; it != NULL; it = it->next)
        std::cout << (it->key) << " ";
    std::cout << std::endl;
}
ListItem* Q_sort(ListItem* data, ListItem** endptr)
{
    *endptr = data;
    if (!data)      return NULL;
    if (!data->next) return data;
    ListItem* Right=NULL;
    ListItem* Left=NULL;
    ListItem* it = data;
    ListItem* tmp;
    int med = data->key;
    while (it)
    {
        tmp = it->next;
        if (it->key < med) 
            Right = Node_Push_Front(Right, it);
        else 
            Left  = Node_Push_Front(Left,  it);
        it = tmp;
    }
    Right=Q_sort(Right, &it);
    if (!Right)
        Right = Q_sort(Left, endptr);
    else        
        it->next = Q_sort(Left, endptr);
    return Right;
}
int main()
{
    ListItem* MyList = NULL;
    ListItem* it;
    srand(time(NULL));
    for (int i = 0; i < 10; ++i)
        MyList = Key_Push_Front(MyList, rand()%100);
    Print_List(MyList);
    MyList = Q_sort(MyList, &it);
    Print_List(MyList);
    return 0;
}
1
0 / 0 / 0
Регистрация: 24.04.2014
Сообщений: 31
20.06.2014, 14:16  [ТС]
хм.. считает далеко не все промежутки) но спасибо и на этом
0
 Аватар для Kuzia domovenok
4268 / 3327 / 926
Регистрация: 25.03.2012
Сообщений: 12,531
Записей в блоге: 1
20.06.2014, 15:29
Что конкретно не так?
0
0 / 0 / 0
Регистрация: 24.04.2014
Сообщений: 31
20.06.2014, 16:55  [ТС]
ну попробуй поставить не 10 чисел, а 50 и сам поймешь
и можно как-нибудь сделать? чтобы в функцию сортировки, передавать только указатель на первый элемент списка
0
 Аватар для Kuzia domovenok
4268 / 3327 / 926
Регистрация: 25.03.2012
Сообщений: 12,531
Записей в блоге: 1
20.06.2014, 17:07
Цитата Сообщение от Xoniks Посмотреть сообщение
и можно как-нибудь сделать? чтобы в функцию сортировки, передавать только указатель на первый элемент списка
А у меня что по-твоему передаётся?
0
0 / 0 / 0
Регистрация: 24.04.2014
Сообщений: 31
20.06.2014, 17:09  [ТС]
C++
1
ListItem* Q_sort(ListItem* data, ListItem** endptr)
endptr.. еще, а по идее можно без него обойтись, я бы хотел передавать в функцию, только один указатель, и больше ничего
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
20.06.2014, 17:09
Помогаю со студенческими работами здесь

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

Быстрая сортировка Хоара
Быстрая сортировка Хоара (QSort) разбивает массив в ходе сортировки до тех пор, пока размер частичного подмассива не станет равен...

Быстрая сортировка Хоара без рекурсивных функций
Здравствуйте мне нужно написать быстрою сортировку Хоара но без рекурсивных функций...помогите пожалуйста разобраться #include...

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

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


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути
Programma_Boinc 01.01.2026
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути Сочетание глобально распределённой вычислительной мощности и инновационных. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru