Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
К2_Допматериалы_15апр.doc
Скачиваний:
2
Добавлен:
01.05.2025
Размер:
3 Мб
Скачать
☆

Сортировка с помощью прямого выбора

  1. Выбирается элемент с наименьшим ключом.

  2. Этот элемент меняется местами с первым элементом a1.

  3. Процесс повторяется с оставшимися n-1, n-2 и т.д. элементами, пока не останется один максимальный элемент.

i=1

6

5

3

4

i=2

3

5

6

4

i=3

3

4

6

5

Рез-т

3

4

5

6

  • ПРОЦЕДУРА СОРТИРОВКИ МАССИВА

Procedure StraigthSelection;

Var

I, j, k:Integer;

min:Integer;

begin

for i:=1 to n-1 do

begin

k:=i; min:=a[i];

for j:=i to n do

if a[j]<min then

begin

k:=j; min:=a[k];

end;

a[k]:=a[i]; a[i]:=min;

end;

end;

  • СОРТИРОВКА СОДЕРЖИМОГО КОЛЬЦЕВОГО СПИСКА (ОДНОСВЯЗНОГО/ДВУСВЯЗНОГО).

Procedure StraigthSelection(H:List);

Var

p1,p2,pMin:List;

min:Integer;

begin

if H<>nil then

begin

p1:=H;

repeat

pMin:=p1; {ссылка на узел с мин. значением}

min:=p1^.info;

p2:=p1^.next;

{Поиск наименьшего значения в оставшейся части списка}

While p2<>H do

begin

if p2^.info<min then

begin

min:=p2^.info;

pMin:=p2;

end;

p2:=p2^.next;

end;

{Обмен}

pMin^.info:=p1^.info;

p1^.info:=min;

{Переход на следующий узел}

p1:=p1^.next;

until p1^.next=H;

end;

end;

Сортировка с помощью прямого обмена (пузырьковая)

Алгоритм прямого обмена основан на сравнении и, при необходимости, обмене значений в паре соседних элементов и продолжении этого процесса до тех пор, пока не будут упорядочены все элементы: повторяем проходы по массиву (списку), сдвигая каждый раз наибольший (или наименьший) элемент в оставшейся последовательности к его правому концу. При каждом проходе элемент перемещается до уровня, соответствующего его значению.

  • ПРОЦЕДУРА СОРТИРОВКИ МАССИВА (ПО ВОЗРАСТАНИЮ)

    PROCEDURE BubbleSort;

    VAR

    i, j:Integer;

    x:Integer;

    BEGIN

    FOR i := N Downto 2 do

    FOR j:=1 to i-1 do

    IF a[j] > a[j+1] THEN

    BEGIN

    x := a[j]; a[j] := a[j+1]; a[j+1]:=x

    END

    END {BubbleSort};

    i=N (4)

    6

    5

    3

    4

    5

    6

    3

    4

    5

    3

    6

    4

    5

    3

    4

    6

    i=N-1 (3)

    5

    3

    4

    6

    3

    5

    4

    6

    3

    4

    5

    6

    i=N-2 (2)

    3

    4

    5

    6

  • СОРТИРОВКА СОДЕРЖИМОГО КОЛЬЦЕВОГО СПИСКА (ОДНОСВЯЗНОГО/ДВУСВЯЗНОГО)

Функция для подсчета числа узлов в кольцевом списке (вспомогательная)

Function NodesCount(var H:List):Integer;

Var

p:List;

i:integer;

begin

if H=nil then i:=0

else

Begin

p:=h;

i:=1;

while p^.next<>h do

begin

p:=p^.next;

inc(i);

end;

End;

NodesCount:=i;

End;

procedure BubbleSort(h:list);

var

i, j, n: integer;

p1:list;

x:integer;

begin

n:=nodescount(h);

for i := n downto 2 do

begin

p1:=h;

for j:=1 to i-1 do

begin

if p1^.info>p1^.next^.info then

begin

x := p1^.info;

p1^.info := p1^.next^.info;

p1^.next^.info:= x;

end;

p1:=p1^.next;

end;

end;

end {Bubblesort};