Название сортировки
|
Количество сравнений
|
Количество присваиваний
|
Простой обмен (пузырьковая)
|
O(N2)
|
O(N2)
|
Прямой выбор
|
O(N2)
|
O(N)
|
Простая вставка
|
O(N2)
|
O(N2)
|
Бинарная (двоичная) вставка
|
O(NlogN)
|
O(N2)
|
Быстрая (QuickSort)
|
O(N2) (на практике O(NlogN))
|
O(N2) (на практике O(NlogN))
|
Слияниями
|
O(NlogN)
|
O(NlogN)
|
Пирамидальная (HeapSort)
|
O(NlogN)
|
O(NlogN)
|
Таким образом наилучшую теоретическую оценку имеют два последних из перечисленных в таблице алгоритмов, однако в практическом программировании для сортировки данных обычно используется QuickSort, как в силу высокой производительности (особенно выигрывает данный алгоритм по числу реально выполняемых присваиваний), так и в силу простой реализации.
Рассмотрим некоторые виды сортировок. Каждая программа сортировки использует два типа данных, определенных пользователем, которые определяются следующим образом:
type
DataItem = integer;
DataArray = array [1..80] of DataItem;
3.1.1. Линейная сортировка или сортировка выбором.
Этот метод сортировки основан на следующих принципах:
1. Выбирается максимальный элемент.
2. Он меняется местами с первым элементом А[1]. На первом месте оказывается максимальный элемент.
3. Дальше рассматривается только неотсортированная часть массива, и этот процесс повторяется с оставшимися (N - 1), (N - 2) элементами и т. д. до тех пор, пока не останется один самый маленький элемент.
procedure Linesort(var item: DataArray; count:integer);
var
i,j, Index: integer;
x: DataItem;
begin
for i:=1 to count-1 do
begin
index:=i;
{Поиск максимального элемента}
for j:=i+1 to n do
if item[index]< item[j] then index:=j;
{Обмен максимального элемента с первым рассматриваемым}
x:= item[i];
item[i]:= item[index];
item[index]:=x;
end;
end;
Достарыңызбен бөлісу: |