선택정렬 (Selection sort)


▷ 선택정렬(Selection sort)


선택정렬은 가장 작은 값을 선택하여 그 값을 나열하는 과정을 반복하는 간단한 정렬 알고리즘이다.


배열에 존재하는 값중 가장 작은 값을 찾아서 첫 번째에 위치하는 값과 교환한다.


다음은 첫 번째를 제외한 나머지 값들 중 가장 작은 값을 찾아서 두 번째 위치하는 값과 교환한다.


이렇게 모든 배열이 정렬될 때 까지 게속한다.



임의의 값을 정렬해보자.

정렬의 순서는 오름차순이다.




▷ 정렬방법.


1. 처음 시작 시 가장 작은 값이 어떤 위치에 있는지 모르기 때문에 첫 번째 위치에 있는 값을 가장 작은 값으로 설정한다.


2. 값의 위치를 하나씩 옮기면서 가장 작은 값으로 설정했던 값과 비교한다.


3. 처음 설정했던 값보다 작은 값이 나오면 그 값을 가장 작은 값으로 설정하고 모든 값의 비교가 끝날때 까지 비교를 게속한다.


4. 모든 비교가 끝났으면 가장 작은 값과 첫 번째 값을 교환한다.


5. 첫 번째 값을 제외하고 1~4번의 과정을 반복한다.




※ 유의사항. 

- Min : 제일 작은 값.

- Index : 값의 인덱스.

- 제일 작은 값이 어떤 값인지 모른다고 가정한다.

- 처음 시작 시 0번째 인덱스를 제일 작은 값이라고 설정한다.

시작 : 5, 7, 3, 4, 9, 1


1).

- Min : 5

- Index : 0

Index : 0 [1] 2 3 4 5

value : 5 [7] 3 4 9 1


2).

- Min : 3

- Index : 2

Index : 0 1 [2] 3 4 5

value : 5 7 [3] 4 9 1

값과 인덱스를 기억.


3).

- Min : 3

- Index : 2

Index : 0 1 2 [3] 4 5

value : 5 7 3 [4] 9 1


4).

- Min : 3

- Index : 2

Index : 0 1 2 3 [4] 5

value : 5 7 3 4 [9] 1


5).

- Min : 1

- Index : 5

Index : 0 1 2 3 4 [5]

value : 5 7 3 4 9 [1]

값과 인덱스를 기억.


끝.


교환.

Index : [0] 1 2 3 4 [5]

value : [5] 7 3 4 9 [1]


첫 번째 값 : 5

끝의 값 : 1

두 개의 값의 자리를 교환한다.


교환완료.

Index : [0] 1 2 3 4 [5]

value : [1] 7 3 4 9 [5]


위의 과정을 모든 값들이 정렬될때 까지 반복한다.





Code


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
30
31
32
33
34
35
36
37
38
39
40
#include <iostream>
using namespace std;
 
#define MAX            6
 
void SelectSort(int *Number );
void main()
{
    int Number[MAX] = {5,7,3,4,9,1};
 
    SelectSort( Number );
 
    for(int i = 0; i < MAX; i++)
        printf("%d \n", Number[i] );
}
 
void SelectSort( int *Number )
{
    int Min;
    int Index;
 
    for(int i = 0; i < MAX; i++)
    {
        Min = Number[i];
        Index = i;
 
        for(int j = i + 1; j < MAX; j++)
        {
            if(Min > Number[j])
            {
                Min = Number[j];
                Index = j;
            }
        }
 
        int Temp = Number[Index];
        Number[Index] = Number[i];
        Number[i] = Temp;
    }
}
cs





결과





'자료구조' 카테고리의 다른 글

삽입정렬 (Insertion sort)  (0) 2017.01.01
빅오  (0) 2017.01.01
변형된 버블정렬 (Bubble Sort)  (0) 2017.01.01
버블정렬(Bubble Sort)  (0) 2017.01.01
정렬이란?  (0) 2017.01.01