하지만 Bubble Sort와 마찬가지로 그 구현 방법에 있어서 빠르기 때문에 작은 단위의 데이타 정렬에서 이용하기에 적합하다고 할 수 있다.
Selection Sort는 배열(혹은 리스트)에서 가장 작은 값을 찾아내어 그 값을 최앞단에 위치 시키는 방식이다.
Sort 대상 : 8 5 1 9 2
이렇게 5개의 숫자가 있다고 가정했을 때 다음과 같은 과정을 보인다.
8 5 1 9 2 => 최소값을 찾아낸다
1 5 8 9 2 => 1과 비교 대상의 첫번째 인덱스와 바꾼다.
5 8 9 2 => 최소값이 맨 앞단으로 옮겨졌기 때문에 인덱스를 증가하여 비교한다.
2 8 9 5 => 다시 최소값을 찾아 비교 대상의 첫번째 인덱스와 바꾼다.
8 9 5 => 인덱스를 증가하여 다시 비교한다.
1 5 8 9 2 => 1과 비교 대상의 첫번째 인덱스와 바꾼다.
5 8 9 2 => 최소값이 맨 앞단으로 옮겨졌기 때문에 인덱스를 증가하여 비교한다.
2 8 9 5 => 다시 최소값을 찾아 비교 대상의 첫번째 인덱스와 바꾼다.
8 9 5 => 인덱스를 증가하여 다시 비교한다.
위 과정을 배열의 마지막까지 진행을 하게 되면 정렬이 완료된다.
다음은 프로그램으로 나온 과정이다.
8 , 5 ,1 , 9 , 2
1 , 5 , 8 , 9 , 2
1 , 2 , 8 , 9 , 5
1 , 2 , 5 , 9 , 8
1 , 2 , 5 , 8 , 9
1 , 2 , 5 , 8 , 9
1 , 5 , 8 , 9 , 2
1 , 2 , 8 , 9 , 5
1 , 2 , 5 , 9 , 8
1 , 2 , 5 , 8 , 9
1 , 2 , 5 , 8 , 9
php로 만든 예제
[code php]
<?php
$a = array( 8 , 5 , 1 , 9 , 2);
SelectionSort(& $a);
function SelectionSort($array)
{
$loop_count = count($array);
for($i = 0 ; $i < $loop_count ; $i++)
{
$min = $array[$i];
$minIndex = $i;
/* 최소값을 찾기 위하여 루프를 돌린다. */
for($j = $i ; $j < $loop_count ; $j++)
{
if($array[$j] < $min)
{
$min = $array[$j];
$minIndex = $j;
}
}
swap(& $array[$i] , & $array[$minIndex]);
echo implode(' , ' , $array) . "<br/>";
}
}
function swap($a , $b)
{
$tmp = $b;
$b = $a;
$a = $tmp;
}
?>
[/code]
C++로 구현한 예
[code cpp]
#include <iostream>
using namespace std;
void swap(int *a , int *b)
{
int *tmp = b;
b = a;
a = tmp;
}
int main()
{
int a[5] = {8 , 5 , 1 , 9 , 2};
int loop_count = (sizeof(a) / sizeof(a[0]));
int min , minIndex;
for(int i = 0 ; i < loop_count ;i++)
{
min = a[i];
minIndex = i;
for(int j = i ; j < loop_count ; j++)
{
if(a[j] < min)
{
min = a[j];
minIndex = j;
}
}
swap(a[i] , a[minIndex]);
}
cout << a[0] << endl;
return 0;
}
[/code]
댓글 없음:
댓글 쓰기