Внимание! для запуска анимации необходим java web плагин. Скачать можно здесь
Сортировка обменом (метод пузырька).
Последовательно сравниваются пары соседних элементов x[i] и x[i+1]. Если пара расположена не в требуемом порядке, то элементы переставляются.
После первого "прохода" массива на своем месте окажется последний элемент при сортировке по возрастанию (или первый - если сортируем по убыванию). С каждым очередным проходом на свое место будет вставать очередной крайний элемент.
Всего потребуется N-1 проходов, причем число проверок при очередном проходе уменьшается на еденицу.
{сортировка пузырьком}
Program Sortirovka 2;
type mas=array[1..100] of integer;
var a:mas;
k,i,n:integer;
begin
randomize;
writeln('n');
readln(n);
for i:=1 to n do a[i]:=random(10);
for i:=1 to n do write(a[i]:4);
for i:=2 to n do
for j:=n downto i do if a[j-1]>a[j] then
begin
k:=a[j];
a[j]:=a[j-1];
a[j-1]:=k;
end;
readln;
for i:=1 to n do write(a[i]:4);
readln;
end.
Сортировка выбором.
Отыскивается максимальный элемент и переносится в конец массива (или начало массива при сортировке по убыванию). Затем эта процедра применяется ко всем элементам, кроме последнего (или первого) N-1 раз.
{Сортировка выбором}
Program Sortirovka 1;
type mas=array[1..100] of integer;
var a:mas;
k,i,n,r,min,max:integer;
begin
randomize;
writeln('n');
readln(n);
for i:=1 to n do a[i]:=random(10);
for i:=1 to n do write(a[i]:4);
for i:=1 to n-1 do begin
min:=a[i];
k:=i;
for j:=i+1 to n do if min>a[j] then
begin
min:=a[j];
k:=j;
end;
a[k]:=a[i];
a[i]:=min;end;
readln;
for i:=1 to n do write(a[i]:4);
readln;
end.
Быстрая сортировка.
"Быстрая сортировка" (сортировка Хоара) является наиболее широко применяемым и одним их самых эффективных алгоритмов.
Общая схема такова:
из массива выбирается некоторый опорный элемент a[i],
запускается процедура разделения массива, которая перемещает все ключи, меньшие, либо равные a[i], влево от него, а все ключи, большие, либо равные a[i] - вправо,
теперь массив состоит из двух подмножеств, причем левое меньше, либо равно правого,
для обоих подмассивов: если в подмассиве более двух элементов, рекурсивно запускаем для него ту же процедуру.
{Var A:Art -сортируемый массив
Var N:Integer - количество элементов в массиве, которые надо сортировать
Procedure Sort - рекурсивная процедура сортировки
}
Program Choar;
Type Art = Array[1..100] Of Integer;
Var A:Art;
N,I:Integer;
Procedure Sort(Var A:Art;N:Integer);
Var X,Xi,I,J,P,T,Z:Integer;
B:Art;
Begin
Xi:=(N Div 2) + (N Mod 2);
X:=A[Xi];
I:=1;J:=N;
Repeat
While A[I]<X Do Inc(I);
While X<A[J] Do Dec(J);
If I<=J Then Begin
T:=A[I];A[I]:=A[J];A[J]:=T;
Inc(I);Dec(J);
End;
Until (Not I<=J);
P:=I-1;
If P>1 Then Begin
For Z:=1 To P Do B[Z]:=A[Z];
Sort(B,P);
For Z:=1 To P Do A[Z]:=B[Z];
End;
If P<N Then Begin
For Z:=P+1 To N Do B[Z-P]:=A[Z];
Sort(B,N-P);
For Z:=P+1 To N Do A[Z]:=B[Z-P];
End;
End;
Begin
Write('Количество элементов массива: ');
ReadLn(N);
For I:=1 To N Do Begin
Write('Элемент ',I,': ');
ReadLn(A[I]);
End;
Sort(A,N);
WriteLn('Отсортированный массив: ');
For I:=1 To N Do Write(A[I],'; ');
End.