자료ꡬ쑰

Selection Sort 선택정렬

mmin.h 2020. 8. 4. 10:22

μ•ˆλ…•ν•˜μ„Έμš”. 주인μž₯ Hμž…λ‹ˆλ‹€. 

μ˜€λŠ˜μ€ 선택정렬에 λŒ€ν•΄μ„œ μ•Œμ•„λ³Όκ±΄λ°μš”. 

1~10 κΉŒμ§€ λ¬΄μ§ˆμ„œν•œ 숫자λ₯Ό μ˜€λ¦„μ°¨μˆœμœΌλ‘œ μ •λ ¬ν•œλ‹€. 라고 ν•œλ‹€λ©΄ 

선택정렬은 κ°€μž₯ μž‘μ€ 것을 μ„ νƒν•΄μ„œ 제일 μ•žμœΌλ‘œ 보내면 μ–΄λ–¨κΉŒ? λΌλŠ” κ³ λ―Όμ—μ„œ μ‹œμž‘ν–ˆμŠ΅λ‹ˆλ‹€. 

κ°€μž₯ 기초적인 정렬이라고 ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 

 

선택정렬은 λŒ€λž΅ N* (N+1)/2 번의 연산을 μˆ˜ν–‰ν•˜λŠ”λ°μš”. 

λΉ… 였 ν‘œκΈ°λ²•μœΌλ‘œ ν•˜κ²Œλœλ‹€λ©΄  O(N^2)κ°€ λ©λ‹ˆλ‹€. 

즉, μ„ νƒ μ •λ ¬μ˜ μ‹œκ°„ λ³΅μž‘λ„λŠ” O(N^2). 

// 1 ~ 10 κΉŒμ§€ μ •λ ¬ ν•˜κΈ° 
#include<stdio.h>
int main(void) {
	int arr[10] = { 1,3,2,5,7,6,10,9,8,4 };

	int i, j, index, temp;

	for (i = 0; i < 10; i++) {
		int min = 11;
		for (j = i; j < 10; j++) {
			if (arr[j] < min) {
				min = arr[j];
				index = j;
			}
		}
		temp = arr[i];
		arr[i] = arr[index];
		arr[index] = temp;
	}
	for (i = 0; i < 10; i++) {
		printf("%d", arr[i]);
	}
	return 0;
}