6 / 2 / 0
Регистрация: 25.10.2010
Сообщений: 86
|
|
1 | |
Быстрая сортировка с разделением13.05.2011, 16:16. Показов 4773. Ответов 5
Метки нет (Все метки)
Помогите создать функцию быстрой сортировки с разделением.
Мы не изучали ее алгоритм в делфи. Пока она выглядит так: Код
/ ф-ция быстрой сортировки с разделением int BSortirovka(int a, char* c) { int i,j,p; int x; return 0; }
0
|
13.05.2011, 16:16 | |
Ответы с готовыми решениями:
5
Быстрая» сортировка (разделением) с использованием указателей Сортировка разделением Сортировка разделением Сортировка разделением |
130 / 117 / 30
Регистрация: 14.11.2010
Сообщений: 707
|
|||||||||||
13.05.2011, 17:29 | 2 | ||||||||||
Сообщение было отмечено mik-a-el как решение
РешениеКод
Псевдокод. quickSort ( массив a, верхняя граница N ) { Выбрать опорный элемент p - середину массива Разделить массив по этому элементу Если подмассив слева от p содержит более одного элемента, вызвать quickSort для него. Если подмассив справа от p содержит более одного элемента, вызвать quickSort для него. } Реализация на Си.
есть еще и мдификация со стеком: Псевдокод. Код
Итеративная QuickSort (массив a, размер size) { Положить в стек запрос на сортировку массива от 0 до size-1. do { Взять границы lb и ub текущего массива из стека. do { 1. Произвести операцию разделения над текущим массивом a[lb..ub]. 2. Отправить границы большей из получившихся частей в стек. 3. Передвинуть границы ub, lb чтобы они указывали на меньшую часть. } пока меньшая часть состоит из двух или более элементов } пока в стеке есть запросы }
0
|
6 / 2 / 0
Регистрация: 25.10.2010
Сообщений: 86
|
|
13.05.2011, 18:23 [ТС] | 3 |
у меня не получается
0
|
130 / 117 / 30
Регистрация: 14.11.2010
Сообщений: 707
|
|
13.05.2011, 18:42 | 4 |
0
|
6 / 2 / 0
Регистрация: 25.10.2010
Сообщений: 86
|
|
13.05.2011, 20:05 [ТС] | 5 |
я не понимаю по какому принципу это работает и соответственно не получается добавить функцию
Добавлено через 3 минуты я сделала вот так Код
// ф-ция быстрой сортировки с разделением int BSortirovka(int N, char* a) { template<class T> long i = 0, j = N; // поставить указатели на исходные места T temp, p; p = a[ N>>1 ]; // центральный элемент // процедура разделения do { while ( a[i] < p ) i++; while ( a[j] > p ) j--; if (i <= j) { temp = a[i]; a[i] = a[j]; a[j] = temp; i++; j--; } } while ( i<=j ); // рекурсивные вызовы, если есть, что сортировать if ( j > 0 ) quickSortR(a, j); if ( N > i ) quickSortR(a+i, N-i); } return 0; }
0
|
130 / 117 / 30
Регистрация: 14.11.2010
Сообщений: 707
|
||||||
13.05.2011, 20:42 | 6 | |||||
Сообщение было отмечено mik-a-el как решение
Решение
вот рабочий код, используй итеративный алгоритм:
и почитай здесь
0
|
13.05.2011, 20:42 | |
13.05.2011, 20:42 | |
Помогаю со студенческими работами здесь
6
Быстрая сортировка(сортировка Хоара). Отсортировать фрагмент массива Быстрая сортировка (сортировка Хоара) для связных списков Сортировка Слиянием vs Быстрая Сортировка - что лучше C/C++ FAQ :: Быстрая сортировка (сортировка Хоара) Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |