StartprogrammingusingObjectPascal:SelectionSortAlgorithm
선택 정렬 알고리즘
이 유형의 정렬은 버블 정렬과 유사하지만, 많은 양의 데이터에 대해 더 빠릅니다. 외부 순환문과 내부 순환문 두 개의 순환문이 있습니다. 내부 순환문은, 두 바퀴가 남기 전까지 외부 순환문을 돌 때마다 순환 횟수가 감소합니다.
program SelectionSort;
{$mode objfpc}{$H+}
uses
{$IFDEF UNIX}{$IFDEF UseCThreads}
cthreads,
{$ENDIF}{$ENDIF}
Classes
{ you can add units after this };
procedure SelectSort(var X: array of Integer);
var
i: Integer;
j: Integer;
SmallPos: Integer;
Smallest: Integer;
begin
for i:= 0 to High(X) -1 do // Outer loop
begin
SmallPos:= i;
Smallest:= X[SmallPos];
for j:= i + 1 to High(X) do // Inner loop
if X[j] < Smallest then
begin
SmallPos:= j;
Smallest:= X[SmallPos];
end;
X[SmallPos]:= X[i];
X[i]:= Smallest;
end;
end;
// Main application
var
Numbers: array [0 .. 9] of Integer;
i: Integer;
begin
Writeln('Please input 10 random numbers');
for i:= 0 to High(Numbers) do
begin
Write('#', i + 1, ': ');
Readln(Numbers[i]);
end;
SelectSort(Numbers);
Writeln;
Writeln('Numbers after Selection sort: ');
for i:= 0 to High(Numbers) do
begin
Writeln(Numbers[i]);
end;
Write('Press enter key to close');
Readln;
end.
버블 정렬보다 빠름에도 불구하고, 선택 정렬은 데이터 초기 정렬과 관계 없이 같은 순환횟수를 지니는 반면에, 버블 정렬은 데이터가 정렬되었거나 약간 정렬된 경우 빨라(적은 외부 순환 횟수)집니다.