StartprogrammingusingObjectPascal:SelectionSortAlgorithm

From 흡혈양파의 번역工房
Jump to: navigation, search

선택 정렬 알고리즘

이 유형의 정렬은 버블 정렬과 유사하지만, 많은 양의 데이터에 대해 더 빠릅니다. 외부 순환문과 내부 순환문 두 개의 순환문이 있습니다. 내부 순환문은, 두 바퀴가 남기 전까지 외부 순환문을 돌 때마다 순환 횟수가 감소합니다.

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.

버블 정렬보다 빠름에도 불구하고, 선택 정렬은 데이터 초기 정렬과 관계 없이 같은 순환횟수를 지니는 반면에, 버블 정렬은 데이터가 정렬되었거나 약간 정렬된 경우 빨라(외부 순환 횟수 줄어듦)집니다.