Алгоритм сортировки простой выборкой, однако, редко применяется в том варианте, в каком он описан выше. Гораздо чаще применяется его, так называемый, обменный вариант. При обменной сортировке выборкой входное и выходное множество располагаются в одной и той же области памяти; выходное - в начале области, входное - в оставшейся ее части. В исходном состоянии входное множество занимает всю область, а выходное множество - пустое. По мере выполнения сортировки входное множество сужается, а выходное - расширяется.
Обменная сортировка простой выборкой показана в программном примере 3.8. Процедура имеет только один параметр - сортируемый массив.
{===== Программный пример 3.8 =====}
Procedure Sort(var a : SEQ);
Var x, i, j, m : integer;
begin
for i:=1 to N-1 do { перебор элементов выходного множества}
{ входное множество - [i:N]; выходное - [1:i-1] }
begin m:=i;
for j:=i+1 to N do { поиск минимума во входном множестве }
if (a[j] < a[m]) then m:=j;
{ обмен 1-го элемента вх. множества с минимальным }
if i<>m then begin
x:=a[i]; a[i]:=a[m]; a[m]:=x;
end;end; end;
Результаты трассировки программного примера 3.8 представлены в таблице 3.5. Двоеточием показана граница между входным и выходным множествами.
Шаг | Содержимое массива а |
Исходный | :242 447 286 708_24_11 192 860 937 561 |
_11:447 286 708_ 24 242 192 860 937 561 | |
_11_24:286 708 447 242 192 860 937 561 | |
_11_24 192:708 447 242 286 860 937 561 | |
_11_24 192 242:447 708 286 860 937 561 | |
_11_24 192 242 286:708 447 860 937 561 | |
_11_24 192 242 286 447:708 860 937 561 | |
_11_24 192 242 286 447 561:860 937 708 | |
_11_24 192 242 286 447 561 708:937 860 | |
_11_24 192 242 286 447 561 708 860:937 | |
Результат | _11_24 192 242 286 447 561 708 860 937: |