Реферат Курсовая Конспект
Сортировка бинарными включениями - раздел Информатика, Оглавление Сортировка И Поиск Информации. 1 Методы Внутренн...
|
Оглавление
Сортировка и поиск информации. 1
Методы внутренней сортировки. 1
Сортировки включением.. 1
Сортировка прямым включением. 1
Сортировка бинарными включениями. 2
Сортировка выбором.. 2
Прямой выбор. 2
Обменные сортировки. 3
Сортировка прямого обмена (пузырьковая). 3
Шейкерная сортировка. 3
Пирамидальная сортировка. 3
Обменная сортировка разделением (быстрая сортировка). 4
Контрольные вопросы.. 4
Комбинированный урок №13
Тема:Сортировка и поиск информации. Методы внутренней сортировки
Цель: изучить методы внутренней сортировки такие как.
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);
Var i,j:word;
x:integer;
Begin
For i:=1 To n-1 Do
Begin
For j:=n DownTo i Do
If a[j-1]>a[j] Then
Begin
x:=a[j-1]; a[j-1]:=a[j]; a[j]:=x
End
End
End;{Bubble_Sort}
Шейкерная сортировка.
Улучшение алгоритма - это запоминать, производится ли на данном проходе какой-либо обмен. Если нет, то это означает, что алгоритм может закончить работу. Этот процесс улучшения можно продолжить, если запомнить не только сам факт обмена, но и место (индекс) последнего обмена.
Однако внимательный программист заметит здесь странную асимметрию: один неправильно расположенный "пузырек" в "тяжелом" конце рассортированного массива всплывет на место за один проход, а неправильно расположенный элемент в "легком" конце будет опускаться на правильное место только на один шаг на каждом проходе. Изменение направления сортировки в каждом из проходов алгоритма поиска называют шейкерной сортировкой.
Для того чтобы тяжелые элементы сразу попадали вниз, пузырьковую сортировку выполняют так, чтобы направление прохода было снизу вверх, следующий проход - сверху вниз и так далее.
Procedure Shaker_Sort(n:word;Var a:array [1..100] of integer);
Var j,k,l,r:word;
x:integer;
Begin
l:=2; r:=n; k:=n;
Repeat
For j:=r DownTo l Do {проход снизу-вверх}
If a[j-1]>a[j] Then
Begin
x:=a[j-1]; a[j-1]:=a[j]; a[j]:=x; k:=j;
End;
l:=k+1;
For j:=l To r Do {проход cверху-вниз}
If a[j-1]>a[j] Then
Begin
x:=a[j-1]; a[j-1]:=a[j]; a[j]:=x; k:=j;
End;
r:=k-1;
Until l>r
End;{Shaker_Sort}
Пирамидальная сортировка.
Предположим, что дана пирамида с элементами hl+1, ..., hr для некоторых значений l и r и нужно добавить новый элемент x для того, чтобы сформировать расширенную пирамиду hl, ..., hr. Новый элемент x сначала помещается в вершину дерева, а затем “просеивается” по пути, на котором находятся меньшие по сравнению с ним элементы, которые одновременно поднимаются вверх; таким образом, формируется новая пирамида.
В процедуре Heap_Sort вызывается процедура Sift, которая реализует алгоритм формирования пирамиды.
Procedure Heap_Sort(n:word;Var a: array [1..100] of integer);
Var l,r:word;x:integer;
Procedure Sift;
Label 13;
Var i,j:word;
Begin
i:=l; j:=2*i; x:=a[i];
While j<=r Do
Begin
If j<r Then
If a[j]<a[j+1] Then j:=j+1;
If x>=a[j] Then Goto 13;
a[i]:=a[j]; i:=j; j:=2*i;
End;
13: a[i]:=x
End;{Sift}
BEGIN
l:=(n div 2)+1; r:=n;
While l>1 Do
Begin
l:=l-1; Sift
End;
While r>1 Do
Begin
x:=a[1]; a[1]:=a[r]; a[r]:=x;
r:=r-1; Sift
End
END;{Heap_Sort}
Обменная сортировка разделением (быстрая сортировка).
Выбирается любой произвольный элемент массива, далее массив просматривается слева направо до тех пор пока не будет найден элемент больший выбранного; а затем просмотрим его справа налево, пока не найдем элемент меньший выбранного. Найденные элементы поменяем местами. Затем продолжим процесс “просмотра с обменом”, пока два просмотра не встретятся где-то в середине массива. В результате массив разделится на две части: левую - с ключами меньшими выбранного элемента; и правую - с большими ключами. Описанный алгоритм применяется к обоим этим частям, в результате чего последовательность разбивается на 4 части. Алгоритм применяется к каждой четвертинке и т.д. Разделение заканчивается, когда в каждой части остается 1 элемент.
В процедуре Quick_Sort вызывается процедура Sort, которая реализует алгоритм разделения и обмена для одной части массива.
Procedure Quick_Sort(n:word;Var a:massiv);
Procedure Sort(l,r:word);
Var w,x:integer;
i,j:word;
Begin
i:=l; j:=r;
x:=a[(l+r) div 2];
Repeat
While a[i]<x Do i:=i+1;
While a[j]>x Do j:=j-1;
If i<=j Then
Begin
w:=a[i]; a[i]:=a[j]; a[j]:=w;
i:=i+1; j:=j-1
End
Until i>j;
If l<j Then Sort(l,j);
If i<r Then Sort(i,r);
End;{Sort}
BEGIN
Sort(1,n);
END;{Quick_Sort}
Контрольные вопросы
– Конец работы –
Используемые теги: Сортировка, бинарными, включениями0.059
Если Вам нужно дополнительный материал на эту тему, или Вы не нашли то, что искали, рекомендуем воспользоваться поиском по нашей базе работ: Сортировка бинарными включениями
Если этот материал оказался полезным для Вас, Вы можете сохранить его на свою страничку в социальных сетях:
Твитнуть |
Новости и инфо для студентов