Подраздел FAQ (ЧАВО, ЧАстые ВОпросы) предназначен для размещения готовых рабочих программ, реализаций алгоритмов. Это нечто вроде справочника, он наполнялся в течение 2000х годов. Ваши вопросы, особенно просьбы решить задачу, не пройдут предмодерацию. Те, кто наполнял раздел, уже не заходят на форум, а с теми, кто на форуме сейчас, лучше начинать общение в других разделах. В частности, решение задач — здесь.
Сравнительная скорость работы некоторых нижеприведенных алгоритмов сортировки:
Примечание:
size: размер сортируемой последовательности n: количество сортировок для замера времени *: RadixSort в последнем тесте прогонялся при параметрах: size=21000; n=100
Последовательно просматривая числа a1 , ... , an находим наименьшее i такое, что ai > ai+1 . Меняем ai и ai+1 местами, продолжаем просмотр с элемента ai+1 и т.д. Тем самым наибольшее число передвинется на последнее место. Следующие просмотры начинать со второго элемента, при этом количество просматриваемых элементов уменьшится на единицу. Массив будет упорядочен после просмотра, в котором участвовали только элементы an-1 и an.
Скачать:
Type arrType = Array[1 .. n] Of Integer;
Procedure Bubble(Var ar: arrType; n: integer); Var i, j, T: Integer; Begin For i := 1 To n Do For j := n DownTo i+1 Do If ar[Pred(j)] > ar[j] Then Begin { < } T := ar[Pred(j)]; ar[Pred(j)] := ar[j]; ar[j] := T End End;
Пример использования
Const n = 10;
Type TType = Integer; arrType = Array[1 .. n] Of TType;
Procedure SwapIndex(i, j: Integer); Var T: TType; Begin move(sorted[i], T, SizeOf(TType)); move(sorted[j], sorted[i], SizeOf(TType)); move(T, sorted[j], SizeOf(TType)); End;
Var i, j: Integer; Begin move(source, sorted, SizeOf(arrType)); For i := 1 To n Do For j := n DownTo i + 1 Do If sorted[Pred(j)] < sorted[j] { change here } Then SwapIndex(Pred(j), j); End;
Var b: arrType; i: Integer;
Begin Bubble(a, b); for i := 1 to n do writeln(b[i]); End.