Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лаб 9.doc
Скачиваний:
2
Добавлен:
25.04.2019
Размер:
229.38 Кб
Скачать
    1. Линейная сортировка

Данный метод сортировки основывается на поиске минимального (максимального) значения среди элементов таблицы.

Для сортировки табличных данных по возрастанию, вначале ищется элемент, имеющий минимальное значение. Затем производится обмен местами найденного минимального элемента и первого элемента в таблице. Следующее минимальное, по величине, число обменивается со вторым элементов таблицы и т.д.

В случае сортировки по убыванию необходимо произвести выше описанные действия, только искать необходимо элемент, имеющий максимальное значение.

Б лок-схема:

Program Sort_3;

Var

a:array[1..50] of integer;

i,j,n,m,c:integer;

Begin

Write('Элементов-');Readln(n);

For i:= 1 to n do

begin

Write('a[',i,']=');

Readln(a[i]);

end;

For i:=1 to n-1 do

begin

m:=i;

For j:=i+1 to n do

If a[j]<a[m] then m:=j;

c:=a[i];

a[i]:=a[m];

a[m]:=c;

end;

For i:=1 to n do Write(a[i]:3);

Readln;

End.

Неэффективность данного метода сортировки объясняется большим числом сравнений, кроме того, не учитывается степень упорядочения массива.

Время сортировки элементов таблицы сокращено, за счет уменьшения количества перестановок – наиболее времяемких операций. Количество перестановок при использовании данного способа сортировки – (n-1).

    1. Метод вставки

Метод основывается на вставке элемента в упорядоченную таблицу значений и сдвижке остальных на одну позицию вправо. Сдвиг элементов будет производиться до тех пор, пока значение вставляемого элемента меньше значения элемента таблицы. Если при очередном сравнении значение вставляемого элемента окажется больше значения элемента таблицы, то место вставки найдено, и новый элемент ставится на освобожденное место в таблице.

Разберем сортировку данным способом на примере.

Задание. Упорядочить элементы линейной таблицы A (4, -7, 6, 3, -2, 5).

  1. Вначале сохраняем значение второго элемента в буферной переменной r и сравниваем ее значение со значение первого элемента. Так как значение буферной переменной меньше значения первого элемента то будет произведена сдвижка первого элемента на вторую позицию в таблице.

A 4 4 6 3 -2 5 r = -7

После этого значение буферной переменной будет присвоено первому элементу таблицы.

A -7 4 6 3 -2 5 r = -7

  1. Далее сохраняем значение третьего элемента в буферной переменной r и сравниваем ее значение со значением второго элемента. Так как значение буферной переменной больше значения второго элемента, то перестановки производиться не будут.

A -7 4 6 3 -2 5 r = 6

  1. Переходим к четвертому элементу. Сохраняем его значение в буферной переменной r и производим сравнение с третьим элементом массива. Так как значение третьего элемента больше значения r то производится сдвижка третьего элемента на четвертую позицию.

A -7 4 6 6 -2 5 r = 3

Далее производится сравнение значений буферной переменной и второго элемента таблицы. Значение второго элемента больше значения r, поэтому производится сдвижка второго элемента на третью позицию.

A -7 4 4 6 -2 5 r = 3

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

A -7 3 4 6 -2 5 r = 3

Аналогично производится упорядочение оставшихся элементов таблицы.

Эффективность данного метода достигается за счет уменьшения числа перестановок. Кроме того, метод учитывает степень упорядочения элементов таблицы.

Program Sort_4;

Var

a:array[1..50] of integer;

i,j,n,r,fl:integer;

begin

Write('Элементов-');Readln(n);

For i:= 1 to n do

begin

Write('a[',i,']=');

Readln(a[i]);

end;

Б

For i:=2 to n do

begin

r:=a[i];fl:=0;j:=i-1;

While (fl=0)and(j>=1) do

If r<a[j] then

begin

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

end else fl:=1;

a[j+1]:=r;

end;

For i:=1 to n do Write(a[i]:3);

readln;

End.

лок-схема:

Все выше описанные методы можно использовать и при сортировке таблиц хранящих символьные величины (char, string). В случае сортировки по возрастанию данные таких таблиц будут располагаться согласно алфавиту1.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]