선택정렬
첫번째 항목부터 최소값을 탐색하여 교환하며 정렬하는 방식입니다.
n 개의 주어진 리스트를 정렬하는데 O(n^2) 만큼의 시간이 걸립니다.
선택정렬의 알고리즘
1. 주어진 리스트 중에 최소값을 찾습니다.
2. 찾은 값을 맨 앞에 위치한 값과 교체합니다.
3. 맨 처음 위치를 뺀 나머지를 같은 방법으로 교체합니다.
선택정렬의 예제
가장 작은값(0)을 찾은 뒤 가장 좌측값(9)와 교환합니다.
9,1,6,8,4,3,2,0 0,1,6,8,4,3,2,9
가장 작은 값(1) 을 찾은 뒤 가장 좌측에서 다음번의 위치와 교환합니다. (여기에서는 같은 값이므로 교환되지 않습니다.)
0,1,6,8,4,3,2,9
가장 작은 값(2) 를 찾은 뒤 그 다음의 좌측값(6)과 교환합니다.
0,1,6,8,4,3,2,9 0,1,2,8,4,3,6,9
위의 작업을 정렬이 끝날때까지 반복합니다.
선택정렬의 소스
#include <stdio.h> void selectionSort(int *list, const int n) { int i, j, indexMin, temp; for (i = 0; i < n - 1; i++) { indexMin = i; for (j = i + 1; j < n; j++) { if (list[j] < list[indexMin]) { indexMin = j; } } temp = list[indexMin]; list[indexMin] = list[i]; list[i] = temp; } } int main() { int i; int list[10] = {5, 3, 8, 4, 9, 1, 6, 2, 7}; selectionSort(list, 10); for(i=0; i<10; i++){ printf("%d ", list[i]); } return 0; }
위키에 첨부된 소스에서 main 함수를 넣어 완성시킨 코드입니다.
'Computer Language > C' 카테고리의 다른 글
[C] 큐 개념, 종류 및 작동 방식, 코드 정리 (0) | 2018.11.08 |
---|---|
[C] 삽입정렬 개념, 알고리즘, 코드 정리 (0) | 2018.11.06 |
[C] 버블정렬 개념, 알고리즘, 코드 정리 (0) | 2018.11.06 |
[C] 퀵정렬 개념, 알고리즘, 코드 정리 (0) | 2018.11.06 |
[C] gettimeofday 소스 수행 시간 차이 계산하기 (2) | 2018.06.28 |