IPB
ЛогинПароль:

> Методы сортировок
virt
сообщение 15.11.2004 11:09
Сообщение #1


Знаток
****

Группа: Пользователи
Сообщений: 419
Пол: Мужской

Репутация: -  6  +


Описание и реализация алгоритмов:
****** ******


Сравнительная скорость работы некоторых нижеприведенных алгоритмов сортировки:

Прикрепленное изображение

Примечание:

size: размер сортируемой последовательности
n: количество сортировок для замера времени
*: RadixSort в последнем тесте прогонялся при параметрах: size=21000; n=100
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
virt
сообщение 15.11.2004 11:13
Сообщение #2


Знаток
****

Группа: Пользователи
Сообщений: 419
Пол: Мужской

Репутация: -  6  +


Пузырьковая сортировка (простым выбором, простым обменом, линейная)

Последовательно просматривая числа 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;

Const
a: arrType =
(7, 1, 9, 8, 5, 6, 2, 4, 3, 10);


Procedure Bubble(Var source, sorted: arrType);

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.


Реализация пузырьковой сортировки на ассемблере:
procedure BubbleSort(Mas: Pointer; Len: LongWord);
asm
dec Len
@CycleExt:
xor ebx,ebx
mov ecx,Len
mov esi,0
@CycleIn:
mov edi,Mas[esi]
cmp edi,Mas[esi+4]
jg @Exchange
add esi,4
loop @CycleIn
jmp @Check
@Exchange:
mov ebx,Mas[esi+4]
mov Mas[esi+4],edi
mov Mas[esi],ebx
add esi,4
loop @CycleIn
@Check:
cmp ebx,0
je @Exit
jmp @CycleExt
@Exit:

end;


Сложность этого метода сортировки составляет О(n^2)

Сообщение отредактировано: klem4 - 2.12.2007 12:04
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 18.07.2025 17:14
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"