티스토리 뷰
정렬 알고리즘 중 하나인 선택 정렬[ Selection Sorting ]에 대해 설명드리겠습니다~!
[선택 정렬이란??]
정렬 알고리즘 중 하나로 정렬이 되지 않은 데이터들을
선택한 하나의 데이터와 비교하면서 가장 작은 데이터를 앞으로 보내 정렬시키는 알고리즘입니다.
[선택 정렬 예시]
5 | 4 | 6 | 3 | 1 |
위의 5, 4, 6, 3, 1의 데이터 값들을 가장 작은 숫자가 앞으로 오게 선택 정렬을 시켜보겠습니다.
첫 번째 : 가장 작은 데이터 값인 1을 가장 앞으로 보내고
가장 앞에 있는 데이터 5는 1이 있던 자리로 옮겨줍니다.
1 | 4 | 6 | 3 | 5 |
: 첫 번째 칸의 데이터 값을 제외하고 나머지 데이터들 중 가장 작은 값인 3을
두 번째 위치해있는 4와 자리를 바꾸어줍니다.
1 | 3 | 6 | 4 | 5 |
세 번째 : 첫 번째 두 번째의 데이터 값을 제외하고 나머지 데이터들 중 가장 작은 값인 4를
세 번째 위치해있는 6과 자리를 바꾸어줍니다.
1 | 3 | 4 | 6 | 5 |
네 번째 : 첫 번째, 두 번째, 세 번째 데이터 값을 제외한 나머지 데이터들 중
가장 작은 값인 5를 네번째 데이터 값 6과 자리를 바꾸어줍니다.
1 | 3 | 4 | 5 | 6 |
그러면 이와 같이 가장 작은 데이터 값이 앞으로 오는 선택 정렬을 할 수 있습니다.
[선택 정렬 코드]
#include <stdio.h>
int main()
{
int i, j, min, index, temp;
int arr[5] = { 5, 4, 6, 3, 1 };
for (i = 0; i < 5; i++) {
min = 999;
for (j = i; j < 5; j++) {
if (min > arr[j]) {
min = arr[j];
index = j;
}
}
temp = arr[i];
arr[i] = arr[index];
arr[index] = temp;
}
printf("정렬 후 데이터 값\n");
for (i = 0; i < 5; i++) {
printf("%d ", arr[i]);
}
}
|
cs |
1. 주어진 데이터 값중 가장 작은 값을 찾는다.
2. 그 값을 맨앞에 위치한 값과 교환한다.
3. 나머지 데이터도 똑같이 진행해줍니다.
[정리]
선택 정렬은 데이터 값들을 모두 비교해 가장 작은 값의 위치를 기억해 두었다가
가장 작은 값과 맨앞의 데이터를 교환하는 방식입니다.
전체 데이터 수 n개 중에서 가장 작은 값을 첫 번째 데이터와 교환합니다.
나머지 데이터 n-1개 중 가장 작은 값을 두번째 데이터와 교환합니다.
이와 같은 방법을 정렬이 완성될때 까지 진행합니다.
결과 적으로 선택 정렬은 n * (n+1) / 2 정도의 연산을 수행한다고 할 수 있습니다.
이처럼 선택 정렬은 가장 작은 데이터 값을 앞으로 보내면
그 데이터는 더 이상 비교하지 않아도 되기 때문에 이전에 포스팅했던
버블 정렬보다는 조금 더 효율적이고 간편한 방법이라고 할 수 있습니다.
'프로그래밍 > c 언어' 카테고리의 다른 글
c언어 - 반복문(for문) 예제 (0) | 2020.01.28 |
---|---|
C언어 - 조건문(if문) 예제 (0) | 2020.01.27 |
비주얼 스튜디오(visual studio) 2019 설치 방법 (0) | 2020.01.25 |
정렬 알고리즘 - 삽입 정렬[Insert sort] (0) | 2020.01.22 |
정렬 알고리즘 - 버블 정렬(Bubble Sort) (0) | 2020.01.18 |