본문 바로가기
지난 학기들의 기록/알고리즘

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

by 아메리카노와떡볶이 2020. 5. 11.
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

댓글