Сортировка методом прямого выбора
Begin
Begin
Begin
Begin
Var
i,j,k: longint;
x,y: single;
nMove:=0;
nCompare:=0;
fori:=2 tonCurr do
forj:= nCurr downto i do
x := A[j-1];
y := A[j];
Inc(nMove, 2);
Inc(nCompare);
// ifA[j - 1] > A[j] then
ifx > y then
A[j - 1] := y;
A[j] := x;
Inc(nMove, 2);
end;
end;
end;
end;
Количество сравнений (nCompare):
| i | Min | Max | Average |
| n-1 | n-1 | n-1 | |
| n-2 | n-2 | n-2 | |
| n-3 | n-3 | n-3 | |
| … | … | … | … |
i
| n-i+1 | n-i+1 | n-i+1 |
| … | … | … | … |
| n | |||
| ∑ |
n2/2-n/2
|
n2/2-n/2
|
n2/2-n/2
|
Количество переносов (nMove):
| i | Min | Max | Average |
| 2(n-1) | 4(n-1) | 3(n-1) | |
| 2(n-2) | 4(n-2) | 3(n-2) | |
| 2(n-3) | 4(n-3) | 3(n-3) | |
| … | … | … | … |
i
| 2(n-i+1) | 4(n-i+1) | 3(n-i+1) |
| … | … | … | … |
| n | |||
| ∑ |
n2-n
|
2n2-2n
|
3/2(n2-n)
|
На первом шаге разыскивается наименьший из n элементов массива, после чего он обменивается значениями с первым элементом.
На втором шаге разыскивается наименьший из оставшихся n-1 элементов массива, после чего он обменивается значениями с вторым элементом.
И т.д.
Текст процедуры:
procedureStraightSelectionSort;
i
n2/2-n/2
n2/2-n/2
n2/2-n/2
n2-n
2n2-2n
3/2(n2-n)