- •Оглавление
- •Комбинированный урок №13
- •Сортировка и поиск информации
- •Методы внутренней сортировки
- •Сортировки включением Сортировка прямым включением.
- •Var I,j:word;
- •X,r:integer;
- •Сортировка бинарными включениями.
- •Var I,j,l,r,m:word;
- •X:integer;
- •Сортировка выбором Прямой выбор.
- •Var I,j,k:word;
- •X:integer;
- •Обменные сортировки Сортировка прямого обмена (пузырьковая).
- •Var I,j:word;
- •X:integer;
- •Шейкерная сортировка.
- •Var j,k,l,r:word;
- •X:integer;
- •Пирамидальная сортировка.
- •Var l,r:word;X:integer;
- •Var I,j:word;
- •Обменная сортировка разделением (быстрая сортировка).
- •Var w,X:integer;
- •I,j:word;
- •Контрольные вопросы
Методы внутренней сортировки
Существует три категории прямых методов внутренней сортировки (сортировка включением, сортировка выбором, обменная сортировка).
Сортировки включением Сортировка прямым включением.
Допустим, что массив a[1..n] разбит на две части a1..i-1, ai..n – в первой части элементы упорядочены, во второй – нет. При i=2 такое разбиение получается автоматически, т.к. массив из одного элемента тривиально упорядочен. На каждом шаге i=2..n выполняем элементарный алгоритм: берем очередной элемент r из неупорядоченной части и включаем его в «нужное» место упорядоченной части. Для поиска нужного места в нижеприведенном алгоритме используется барьер a[0]:=x. Элементы, начиная от i-1 до нужного j сдвигаются на одну позицию: a[j]:=a[j-1]. На каждом проходе происходит перемещение i-того элемента в готовую последовательность, а некоторое число элементов сдвигается вправо. Данный процесс перемещения называется просачиванием элемента.
Во всех процедурах сортировки ключи упорядочиваются по возрастанию. На входе процедур - количество элементов массива (n), на выходе - упорядоченный массив элементов (а).
Procedure Straight_Insertion(n:integer; Var a:array[1..100] of integer);
Var I,j:word;
X,r:integer;
Begin
For i:=2 To n Do
begin
x:=a[i];r:=a[i]; a[0]:=x; j:=i;
While x<a[j-1] Do
Begin a[j]:=a[j-1]; j:=j-1; end;
a[j]:=r
end;
End;{Straight_Insertion}{сортировка прямым включением}
Сортировка бинарными включениями.
Алгоритм сортировки прямыми включениями можно легко улучшить, пользуясь тем, что готовая последовательность a[1],...,a[i-1], в которую нужно включить новый элемент, уже упорядочена. Поэтому место включения можно найти значительно быстрее, применив бинарный поиск, который исследует средний элемент готовой последовательности и продолжает деление пополам, пока не будет найдено место включения. Модифицированный алгоритм сортировки называется сортировкой бинарными включениями.
Procedure Binary_Insertion(n:word;Var a: array[1..100] of integer);
Var I,j,l,r,m:word;
X:integer;
Begin
For i:=2 To n Do
begin
x:=a[i]; l:=1; r:=i-1;
While l<=r Do
begin
m:=(l+r) div 2;
If x < a[m] Then r:=m-1
Else l:=m+1
end;
For j:=i-1 DownTo l Do a[j+1]:=a[j];
a[l]:=x
end;
End;{Binary_Insertion}{сортировка бинарным вкючением}
Сортировка выбором Прямой выбор.
Для i=1..n-1 выполняется следующий элементарный алгоритм: среди элементов ai..n выбираем минимальный am и переставляем местами элементы i-й и m-й. В результате на первое место станет самый минимальный, на второе – следующий минимальный и т.д.
Procedure Straight_Selection(n:word;Var a array[1..100] of integer);
Var I,j,k:word;
X:integer;
Begin
For i:=1 To n-1 Do
begin
m:=i;
For j:=i+1 To n Do
If a[m] > a[j] Then m:=j;
x:=a[i]; a[i]:=a[m]; a[m]:=x
end
End;{Straight_Selection} {сортировка простым выбором}
Обменные сортировки Сортировка прямого обмена (пузырьковая).
Это метод, в котором обмен двух элементов является основной характеристикой процесса. Алгоритм сортировки простым обменом основан на принципе сравнения и обмена пары соседних элементов до тех пор, пока не будут рассортированы все элементы. Для i=1..n-1 выполняется следующий элементарный алгоритм: начиная от n до i последовательно проверяем упорядоченность двух соседних элементов a[j] и a[j-1], и если они не упорядочены, то меняем их местами. В результате такого обмена минимальный элемент перемещается на место i.
Критерием окончания является отсутствие обменов при очередном проходе.
Во всех процедурах сортировки ключи упорядочиваются по возрастанию. На входе процедур - количество элементов массива (n), на выходе - упорядоченный массив элементов (а).
Procedure Bubble_Sort(n:word;Var a: array[1..100] of integer);
