StartprogrammingusingObjectPascal:ShellSortAlgorithm
쉘 정렬 알고리즘
많은 양의 데이터가 있을 때 가장 빠른 정렬 방법이며, 데이터가 약간 정렬되어 있을 경우 버블 정렬과 유사하지만, 앞의 두 정렬 알고리즘보다는 좀 더 복잡합니다.
이 정렬 알고리즘의 이름은 창안자 도널드 쉘의 이름에서 따왔습니다.
program ShellSort;
{$mode objfpc}{$H+}
uses
{$IFDEF UNIX}{$IFDEF UseCThreads}
cthreads,
{$ENDIF}{$ENDIF}
Classes;
procedure ShellS(var X: array of Integer);
var
Done: Boolean;
Jump, j, i: Integer;
Temp: Integer;
begin
Jump:= High(X);
while (Jump > 0) do // Outer loop
begin
Jump:= Jump div 2;
repeat // Intermediate loop
Done:= True;
for j:= 0 to High(X) - Jump do // Inner loop
begin
i:= j + Jump;
if X[j] > X[i] then // Swap
begin
Temp:= X[i];
X[i]:= X[j];
X[j]:= Temp;
Done:= False;
end;
end; // end of inner loop
until Done; // end of intermediate loop
end; // end of outer loop
end;
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;
ShellS(Numbers);
Writeln;
Writeln('Numbers after Shell sort: ');
for i:= 0 to High(Numbers) do
begin
Writeln(Numbers[i]);
end;
Write('Press enter key to close');
Readln;
end.