선택정렬 ( selection sort )

Posted 2012. 10. 22. 13:53

가장 간단한 정렬, 정렬 할 숫자들에서 가장 작은 수를 선택하고 그 수를 앞쪽으로 배치하는 것을

숫차들의 수 만큼 반복하여 정렬하는 방법

데이터가 작을때 정말 효율이 좋다.

하지만 데이터가 많을수록 속도가 현저히 떨어진다.


1. 주어진 배열에서 가장 작은 값을 찾는다.

2. 가장 작은 값을 배열의 처음과 교환한다.

3. 배열에 앞에 배치된 최소값을 이후부터 1, 2 과정을 반복한다.

4. 배열의 수 만큼 과정이 반복되었으면 정렬을 완료하고 끝낸다.


#include <stdio.h>


void Print_Arr( int arr[], int size )

{

for( int i = 0 ; i < size ; i ++ )

{

printf("%d", arr[i] );

if( i < size ) printf(" ");

else printf("\n");

}

printf("\n");

}

void Selection_Sort( int arr[], int size )

{

int Min;

int Min_Index;

int i, j;


for( i = 0 ; i < size - 1 ; i++ )

{

Min_Index = i;

Min = arr[i];


for( j = i + 1 ; j < size ; j++ )

{

if( Min > arr[j] )

{

Min = arr[j];

Min_Index = j;

}

}


arr[Min_Index] = arr[i];

arr[i] = Min;

}

}


void main()

{

int arr[20] = {8,2,12,55,28,39,40,46,100,......};

Print_Arr( arr, 20 );

Selection_Sort( arr, 20 );

Print_Arr( arr, 20 );

}