지난 학기들의 기록/알고리즘

[C 알고리즘] 선택정렬 - Selection Sort Algorithm

아메리카노와떡볶이 2020. 5. 11. 01:49
728x90

가장 기초적인 정렬 4가지, 선택정렬 버블정렬 삽입정렬 퀵정렬을 배워볼것이다. 먼저 선택정렬이다

선택정렬의 핵심아이디어는 말그대로 '선택' 이다.

 

최솟값을 찾아 선택하여 제일 앞으로 보내자.

 

예시를 통해 이해해보자

1 10 5 8 7 6 4 3 2 9 와 같은 10개의 정수가 있을때. 제일 작은 원소는 1이다. 이미 제일 앞에 와있다.

 

그 다음 1을 고정시킨후 제일 작은 원소를 선택해보자 2이다.

 

1 10 5 8 7 6 4 3 2 9

 

1 2 10 5 8 7 6 4 3 9

 

1 2 3 10 5 8 7 6 4 9

위 와같은 과정을 반복함으로써 정렬되는 것이다.

 

1.먼저 작은 값을 선택한다 . MIN 값 찾기

2. 그리고 고정된 숫자제외 제일 앞으로 보내준다. (= i번째 인덱스의 값과 교환한다.)

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include <stdio.h>
void swap(int* p, int a, int b);
int main(void)
{
    int i, j, min, index, temp;
    int array[10= { 110 , 5 , 8 ,7 ,6 ,4 ,3 ,2 ,9 };
    for (i = 0; i < 10; i++) {
        min = 9999; // 최솟값초기화
        for (j = i; j < 10; j++)
        {
            if (min > array[j]) {
                min = array[j];
                index = j;
            }
        }
        swap(array,i, index);
    }
    for(int k=0;k<10;k++){
        printf("%d",array[k]);
    }
    return 0;
}
void swap(int *p,int a, int b) {
    int temp = 0;
    temp = p[a];
    p[a] = p[b];
    p[b] = temp;
}
 
cs

 

 

728x90