Содержание
- 2. Быстрая сортировка (англ. quicksort), часто называемая qsort (по имени в стандартной библиотеке языка Си) — широко
- 3. Общая идея алгоритма состоит в следующем: Выбрать из массива элемент, называемый опорным. Это может быть любой
- 4. Program sort; uses crt; const N = 10; var A:array[0..N] of integer; { массив элементов }
- 6. Скачать презентацию
Слайд 2
Быстрая сортировка (англ. quicksort), часто называемая qsort (по имени в стандартной библиотеке языка
Быстрая сортировка (англ. quicksort), часто называемая qsort (по имени в стандартной библиотеке языка
Си) — широко известный алгоритм сортировки, разработанный английским информатиком Чарльзом Хоаром во время его работы в МГУ в 1960 году.
QuickSort является существенно улучшенным вариантом алгоритма сортировки с помощью прямого обмена, известного, в том числе, своей низкой эффективностью. Принципиальное отличие состоит в том, что в первую очередь производятся перестановки на наибольшем возможном расстоянии и после каждого прохода элементы делятся на две независимые группы. Любопытный факт: улучшение самого неэффективного прямого метода сортировки дало в результате один из наиболее эффективных улучшенных методов.
QuickSort является существенно улучшенным вариантом алгоритма сортировки с помощью прямого обмена, известного, в том числе, своей низкой эффективностью. Принципиальное отличие состоит в том, что в первую очередь производятся перестановки на наибольшем возможном расстоянии и после каждого прохода элементы делятся на две независимые группы. Любопытный факт: улучшение самого неэффективного прямого метода сортировки дало в результате один из наиболее эффективных улучшенных методов.
Слайд 3
Общая идея алгоритма состоит в следующем:
Выбрать из массива элемент, называемый опорным.
Общая идея алгоритма состоит в следующем:
Выбрать из массива элемент, называемый опорным.
Это может быть любой из элементов массива. От выбора опорного элемента не зависит корректность алгоритма, но в отдельных случаях может сильно зависеть его эффективность.
Сравнить все остальные элементы с опорным и переставить их в массиве так, чтобы разбить массив на три непрерывных отрезка, следующие друг за другом: «меньшие опорного», «равные» и «большие».
Для отрезков «меньших» и «больших» значений выполнить рекурсивно ту же последовательность операций, если длина отрезка больше единицы.
На практике массив обычно делят не на три, а на две части: например, «меньшие опорного» и «равные и большие»; такой подход в общем случае эффективнее, так как упрощает алгоритм разделения.
Сравнить все остальные элементы с опорным и переставить их в массиве так, чтобы разбить массив на три непрерывных отрезка, следующие друг за другом: «меньшие опорного», «равные» и «большие».
Для отрезков «меньших» и «больших» значений выполнить рекурсивно ту же последовательность операций, если длина отрезка больше единицы.
На практике массив обычно делят не на три, а на две части: например, «меньшие опорного» и «равные и большие»; такой подход в общем случае эффективнее, так как упрощает алгоритм разделения.
Слайд 4
Program sort;
uses crt;
const N = 10;
var A:array[0..N] of integer; { массив
Program sort;
uses crt;
const N = 10;
var A:array[0..N] of integer; { массив
элементов }
q,i:integer;
procedure QuickSort( L, R : Integer );
var i,j,x,y : integer;
begin
i := l; j := r;
x := A[(l+r) div 2];{выбираем серединный эл-нт массива и делим массив пополам}
repeat
while (A[i] < x) do i:=i+1;{считываем всю левую часть до этого элемента}
while (x < A[j]) do j:=j-1;{считываем всю правую часть до этого элемента}
if ( i <= j ) then{Сортируем элементы массива}
begin
y:=A[i]; A[i]:=A[j]; A[j]:=y;
i:=i+1; j:=j-1;
end;
until (i > j);
if (l < j) then QuickSort(l,j);
if (i < r) then QuickSort(i,r);
end;
q,i:integer;
procedure QuickSort( L, R : Integer );
var i,j,x,y : integer;
begin
i := l; j := r;
x := A[(l+r) div 2];{выбираем серединный эл-нт массива и делим массив пополам}
repeat
while (A[i] < x) do i:=i+1;{считываем всю левую часть до этого элемента}
while (x < A[j]) do j:=j-1;{считываем всю правую часть до этого элемента}
if ( i <= j ) then{Сортируем элементы массива}
begin
y:=A[i]; A[i]:=A[j]; A[j]:=y;
i:=i+1; j:=j-1;
end;
until (i > j);
if (l < j) then QuickSort(l,j);
if (i < r) then QuickSort(i,r);
end;
Следующая -
Виды передач в робототехнике