Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
15
Добавлен:
31.03.2015
Размер:
101.89 Кб
Скачать

3 Аспекта эффективности сортировок

– время, затрачиваемое на прохождение

–…на сортировку

–необходимый объём памяти

Усов. методы требуют n сравнений, простые – n2 сравнений. Для сортировок нельзя использовать массив B.

№20 ПРОСТЫЕ МЕТОДЫ СОРТИРОВОК:

ПРЯМОГО ВЫБОРА Основано на послед. поиске в исх. массиве эл-тов с min значением ключей. Сортировка осуществляется в n-1 проходов. Число сравнений С=n(n-1)/2. Проход – просмотр по задан. алгоритму сортируемой части массива с 1 эл-та до посл. Ключ с min значениями данный эл-т меняется местами с 1 эл-том. Затем выбор min продолжается на оставшегося n-1 элементах, ищется 2 min и т.д.

Procedure select;

Begin

for i:=l to n-1 do

begin

k:=i;

for j:=i+l to n do

if a[j]<a[k] then k:=j;

if k>1 then

begin

Prom:=a[i];

a[i]:=a[k];

a[k]:=Prom;

end end; End;

ОБМЕНА

Осн. на срав-и и смене мест при необходимости для пары соседних элементов до тех пор, пока не будут упор. все эл-ты. Ключи: Ai и Ai+1.Если Ai>Ai+1, то меняется местами. Число проходов n-1. Число сравнений С=n(n-1)/2. Улучшение: если в посл. проходе нет обмена  массив отсортирован. Можно запоминать не только факт наличия обмена, но и индекс посл. обмена, то все индексы > данного эл-та отсортированы. Не симметрия алгоритма. При каждом проходе менять направление просмотра (Шейкер).

Procedure best bubble;

Var m,k:integer;

Begin

For i:=l to n-1 do

Begin

k:=0;

m:=n;

For j:=1 to m-1 do

Begin

If a[j]>a[j+l] then

Begin

обмен; k:=k+1;

End;

End;

m:=j;

if k=0 then break;

end;

end;

Procedure shaker sort;

Begin

S:= 1;

L:=i;

R:=n-1;

While s<>0 do

Begin

S:=0;

Fo i:=L to r do

If a[i]>a[i+l] then

Begin

T:=a[i];

a[i]:=a[i+l];

a[i+l]:=T;

s:=i;

end;

R:=s;

For i:=R downto L do

If a[i]> a[i+l] then

Begin

T:=a[i];

a[i]:=a[i+l];

a[i+l]:=T;

s:=i;

end;

L:=s;

End;

End; ВКЛЮЧЕНИЯ

Массив делится на 2 части – отсорт. и неотсорт. На каждом проходе, начиная с i=2,\ и увелич. i каждый раз на 1, из исходной последовательности извлекается i-ый эл-т и вставляется на нужное место.

Procedure Insert;

Begin

for i:=2 to n do

begin

x:=A[i];

j:=i; A[0]:=x; барьер

while x<A[j-l] do

begin

A[j]:=A[j-1];

j:=j-l;

End;

A[j]:=x;

End;

End;

Улучшение: лев. часть отсортир. место вставки можно искать с помощью двоичного поиска -

Соседние файлы в папке Информатика (1 семестр) (билеты)