๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

์•Œ๊ณ ๋ฆฌ์ฆ˜

์•Œ๊ณ ๋ฆฌ์ฆ˜ [Algorithm] - ์ •๋ ฌ์˜ ๊ฐœ์š”์™€ ์„ ํƒ ์ •๋ ฌ Selection Sort (1) (C,Python)

์ •๋ ฌ์˜ ๊ฐœ์š”

์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๋ฐฐ์šธ ๋•Œ ๊ฐ€์žฅ ๋จผ์ € ๋‚˜์˜ค๋Š” ๋‚ด์šฉ์ด '์ •๋ ฌ (Sort)'์ด๋‹ค. ๊ทธ ์ด์œ ๋Š” ์ •๋ ฌ๋งŒํผ ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ํšจ์œจ์„ฑ ์ฐจ์ด๋ฅผ ๊ทน๋ช…ํ•˜๊ฒŒ ๋ณด์—ฌ์ฃผ๋Š” ๊ฒƒ์ด ์—†๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค!

 

 

์„ ํƒ ์ •๋ ฌ


๋‹ค์Œ์˜ ์ˆซ์ž๋“ค์„ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์„ธ์š”.

1 10 5 8 7 6 4 3 2 9


  ์ผ๋ฐ˜์ ์œผ๋กœ ์ธ๊ฐ„์€ '๊ทธ๋ƒฅ ์ž‘์€์ˆ˜๋ถ€ํ„ฐ ์“ฐ๋ฉด ๋˜์ง€'๋ผ๊ณ  ์ƒ๊ฐํ•˜์ง€๋งŒ, ์ปดํ“จํ„ฐ๋Š” ๊ทธ๋ ‡์ง€ ์•Š๊ณ  ๊ณผ์ •์„ ๊ตฌ์ฒด์ ์œผ๋กœ ๋ช…์‹œํ•ด์ค˜์•ผ ํ•œ๋‹ค. ์œ„์˜ ์ˆ˜๋ฅผ ์ •๋ ฌํ•˜๊ธฐ ์œ„ํ•œ ์•„์ด๋””์–ด์ค‘ ํ•˜๋‚˜๊ฐ€ ์„ ํƒ์ •๋ ฌ์ด๋‹ค.

  ์„ ํƒ์ •๋ ฌ์ด๋ž€ ๊ฐ€์žฅ ์ž‘์€ ๊ฒƒ์„ ์„ ํƒํ•ด์„œ ์ œ์ผ ์•ž์œผ๋กœ ๋ณด๋‚ด๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค. ์ด๋Š” ๊ฐ€์žฅ ์›์‹œ์ ์ด๊ณ  ๊ธฐ์ดˆ์ ์ธ ๋ฐฉ๋ฒ•์ค‘ ํ•˜๋‚˜์ด๋‹ค.

 

C ์–ธ์–ด

#include <stdio.h>

int main(void){  
 // ์„ ํƒ์ •๋ ฌ
	int i, j, min, index, temp;
	int array[10] = { 1,10,5,8,7,6,4,3,2,9 };
	for (i = 0; i < 10; i++) { //๋ฐฐ์—ด์˜ ์›์†Œ ํ•˜๋‚˜์”ฉ ์„ ํƒํ•˜๋ฉฐ ๋ฐ˜๋ณต
		min = array[i]; // ๋ฐ˜๋ณต๋ฌธ์ด ์‹คํ–‰๋  ๋•Œ์˜ ๋งจ ์ฒซ์งธ ๊ฐ’์œผ๋กœ min, index ์ดˆ๊ธฐํ™”
		index = i;
		for (j = i; j < 10; j++) { // ์ •๋ ฌ ์•ˆ๋œ ๋ถ€๋ถ„๋งŒ ๋ฐ˜๋ณต
			if (min > array[j]) { //๋งŒ์•ฝ ์ตœ์†Ÿ๊ฐ’์ด ํ˜„์žฌ ๊ฐ’๋ณด๋‹ค ํฌ๋‹ค๋ฉด
				min = array[j]; // min๊ฐ’ ์—…๋ฐ์ดํŠธ
					index = j;
			}
		}
			temp = array[i]; // ๋ชจ๋“  ์ •๋ ฌ ์•ˆ๋œ ๊ณณ ์ˆœํ™˜ํ›„ ์Šค์™‘
			array[i] = array[index];
			array[index] = temp;
	}

	for (i = 0; i < 10; i++) { //๋ฐฐ์—ด ์ถœ๋ ฅ
		printf("%d ", array[i]);
	}
	return 0;
  }

 

์ด ๋ฐฉ์‹์€ ๋ฐ์ดํ„ฐ์˜ ๊ฐฏ์ˆ˜๊ฐ€ N๊ฐœ์ผ ๋•Œ ๋น„๊ต์—ฐ์‚ฐ์„ N * (N+1) / 2 ๋ฒˆ ์ˆ˜ํ–‰ํ•œ๋‹ค.

  ๋”ฐ๋ผ์„œ ์„ ํƒ ์ •๋ ฌ์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” O(N^2)์ด๋‹ค.

 

๋”ฐ๋ผ์„œ ๋ฐ์ดํ„ฐ์˜ ๊ฐฏ์ˆ˜๊ฐ€ 10,000๊ฐœ๋ผ๋ฉด ๋Œ€๋žต 1์–ต๋ฒˆ์˜ ๋น„๊ต์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•˜๊ฒŒ ๋œ๋‹ค.

 

 

 

 

 

 

 

ํŒŒ์ด์ฌ

a = [1,10,5,8,7,6,4,3,2,9]

for i in range(len(a)): # ์•ž์—์„œ ๋ถ€ํ„ฐ ํ•œ๊ฐœ์”ฉ
  min = a[i] # ๋งจ ์ฒซ๋ฒˆ์งธ ๊ฐ’์„ ์ตœ์†Ÿ๊ฐ’์œผ๋กœ ์ดˆ๊ธฐํ™”
  idx=i # idx์ €์žฅ
  for j in range(len(a)-i): # i๋ฒˆ์งธ ๋ถ€ํ„ฐ ์ˆœํšŒ
    if min> a[j+i]: # ๋งŒ์•ฝ min ๊ฐ’์ด j-i๋ณด๋‹ค ํฌ๋ฉด
      min = a[j+i] # min์— a[j-i]์ €์žฅ
      idx = j+i #min idx์ €์žฅ
  tmp = a[i]
  a[i] = min
  a[idx] = tmp

a

 


์ด ๊ธ€์€ ๋‚˜๋™๋นˆ๋‹˜์˜ ์‹ค์ „ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ฐ•์ขŒ (Algorithm Programming Tutorial)๋ฅผ ์ฐธ๊ณ ํ•ด ์ž‘์„ฑํ•˜์˜€์Šต๋‹ˆ๋‹ค.

https://www.youtube.com/watch?v=qQ5iLNjpxSk&list=PLRx0vPvlEmdDHxCvAQS1_6XV4deOwfVrz 

 

 

728x90