Информатика -продвинутый курс



порошковая покраска дисков, покраска дисков. |

ВАЖНЕЙШИЕ НЕВЫЧИСЛИТЕЛЬНЫЕ АЛГОРИТМЫ (ПОИСК И СОРТИРОВКА) - часть 7


/p>

Программа 46

program sortirovka_3;

(*улучшенная сортировка включением - сортировка Шелла*)

const N=8; t=4;

type item= integer;

var a: array[-9..n] of item; i, j, k, s :integer; x: item;

m: l..t; h :array [l..t] of integer;

begin

(*задание искомого массива*)

for i:=l to N do

begin write('введи элемент a[',i,']=')

readln(a[i])

end;

for i:=l to N do begin write(a[i], ' ');

end;

writeln;

(*алгоритм Шелла*)

h[l]:=9; h[2]:=5; h[3]:=3; h[4]:=1;

for m:=l to t do

begin k:=h[m]; s:=-k; (*барьеры для каждого шага*)

for i:=k+l to n do

begin x:=a[i], j:=i—k; if s=0 then s:=-k;- s:=s+l;

a[s]:=x; while x<a[j] do begin a[j+k]:=a(j]; j:=j-k;

end;

a[j+k]:=x

end;

end;

(*вывод отсортированного массива*)

for i:=l to N do begin write(a[i], ' ');

end;

readln;

end.

 

Программа 47

 

program sortirovka 4;

(*сортировка прямым выбором*)

const N=5;

type item= integer;

var a: array[l..n] of item; i, j, k: integer; x: item;

begin

(*задание искомого массива*)

for i: =1 to N do

begin write('введи элемент a[', i, ']='); readln(a[i]);

end;

for i:=l to N do begin write(a[i],' ');

end;

writeln;

(*алгоритм прямого выбора*)

for i:=l to n-1 do

begin k:=i; x:=a[i]; (*поиск наименьшего элемента*)

for j:=i+l to n do (*и его индекса из a[i]...a{n]*)

if a[j]<x then begin k:=j; x:=a[k)

end;

a(k]:=a[i]; a[i]:=x;

end;

(*вывод отсортированного массива*)

for i:=l to N do begin write(a[i], ' ');

end;

readln;

end.

Улучшенный метод сортировки выбором с помощью дерева. Метод сортировки прямым выбором основан на поисках наименьшего элемента среди неготовой последовательности. Усилить метод можно запоминанием информации при сравнении пар элементов. Этого добиваются определением в каждой паре меньшего элемента за n/2 сравнений. Далее n/4 сравнений позволит выбрать меньший из пары уже выбранных меньших и т.д. Получается двоичное дерево сравнений после n-1 сравнений у которого в корневой вершине находится наименьший элемент, а любая вершина содержит меньший элемент из двух приходящих к ней вершин.


Содержание  Назад  Вперед