В данном посте посмотрим как можно организовать сортировку выбором – это относительно простой вид сортировки. Суть его в следующем
-Просматривать массив от первого элемента до последнего, найти минимальный элемент и поставить его на место первого элемента, а первый на место минимального
-Просматривать массив от второго элемента до последнего, найти минимальный элемент и поставить его на место второго элемента, а второй на место минимального
Повторять и остановиться на предпоследнем элементе, так как последний элемент будет представлять собой вырожденный случай.
Приступим к реализации
На форму добавим следующие компоненты – Memo и 2 кнопки. Одна будет заполнять массив – другая сортировать.
В районе раздела type объявим следующее
1 2 3 4 5 6 7 |
... Const ArraySize=50; // Константа размера массива type TMyArray = array [1..ArraySize] of integer; // Тип нашего массива для сортировки ... |
В глобальных переменных объявляем
1 |
MyArray:TMyArray; |
Заполняем массив случайными числами от 0 до ArraySize
1 2 3 4 5 6 7 8 9 10 11 12 |
procedure TForm2.FillArrayClick(Sender: TObject); var i:integer; begin memo1.lines.clear; //Заполняем данные for i := 1 to ArraySize do begin MyArray[i]:=Random(ArraySize); memo1.lines.add(inttostr (MyArray[i]) ); end; end; |
Объявляем процедуру сортировки
1 2 3 4 |
TForm2=class (TForm) ... procedure Selectionsort(var MyArray:TMyArray; min, max : Longint); ... |
Реализуем алгоритм сортировки
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
procedure TForm2.Selectionsort(var MyArray:TMyArray; min, max : Longint); var i, j , minimum_value, minimum_index : Longint; begin for i := min to max-1 do begin //Встали на начало интервала minimum_value:= MyArray[i] ; minimum_index := i; // Ищем наименьший из оставшихся for j := i + 1 to max do if MyArray[j] < minimum_value then begin minimum_value := MyArray[j] ; minimum_index:= j ; end; // Перемещаем его в нужную позицию. MyArray[minimum_index]:= MyArray[i] ; MyArray[i]:= minimum_value; end; //Form2.Caption:='New'; // showmessage('Hello'); end; |
Сортируем и выводим данные
1 2 3 4 5 6 7 8 9 |
procedure TForm2.Button1Click(Sender: TObject); var i:integer; begin Form2.Selectionsort(MyArray,1,ArraySize); memo1.Lines.Clear; for i := 1 to ArraySize do memo1.Lines.Add(inttostr(MyArray[i])); end; |
Проверяем работу алгоритма – заполняем случайными данными
Сортируем