알고리즘 요약
선택정렬 (selection sort)
-가장 작은 항목을 찾아서 맨앞부터 차례로 배치를 반복한다.
-시간복잡도: O(n²)
정렬과정 설명
① ② ③ ④ ⑤ : 위치번호
[3, 2, 5, 4, 1] :숫자열이 있을 경우,
-제일 작은 수 ⑤1을 ①3과 위치 변경
[1, 2, 5, 4, 3]
-②위치부터 제일 작은 수 ②2 와 ②2 서로 위치 변경
[1, 2, 5, 4, 3]
-③위치부터 제일 작은 수 ⑤3과 ③5 서로 위치 변경
[1, 2, 3, 4, 5]
-마지막 전까지 반복하면 정렬이 끝난다.
def selection_sort(a): # a는 숫자열
ln = len(a) # 배열의 길이
for i in range(ln - 1): # 배열 마지막 위치 전까지
min = i # 제일 작은 값을 가진 위치를 min 이라 하고 초기값으로 시작위치 대입
for j in range(i + 1, ln): # 시작 다음위치 부터 마지막 배열까지 루프
if a[min] > a[j]: # 더 작은 값이 있으면
min = j # 더 작은 값이 있는 위치값으로 변경
a[i], a[min] = a[min], a[i] # 비교시작 위치값과 최소값을 교환
return a # 루프가 끝나면 정렬 끝. 리턴.
print(selection_sort([5, 2, 3, 4, 1])) # 결과는 [1, 2, 3, 4, 5]
#include <stdio.h>
void selection_sort(int a[], int len) {
int i, j, min, tmp;
for (i = 0; i < len-1; i++) { // 마지막 하나는 비교가 필요없으므로 그 전까지 비교 루프
min = i; //최소위치 초기값으로 시작 인덱스값.
for (j = i + 1; j < len; j++) { // 시작 다음부터 마지막까지 값 비교.
if (a[j] < a[min]) min = j; // 더 작은 값이 있으면 min 인덱스값 변경
}
tmp = a[min]; a[min] = a[i]; a[i] = tmp; // 최소값과 현재
}
}
int main() { // 선택정렬 함수 테스트
int i, a[] = {3, 2, 5, 4, 1}, len = sizeof(a) / sizeof(a[0]);
selection_sort(a, len);
for (i = 0; i < len; i++) printf("%d ", a[i]); // 결과: 1 2 3 4 5
}