Computer Science/DS & Algorithm

Divide and Conquer: ๋ถ„ํ•  ์ •๋ณต - ํ€ต ์ •๋ ฌ

geum 2021. 4. 18. 17:44

 

๊ฐœ๋…

๋ฐฐ์—ด์„ ๋‘˜๋กœ ๋ถ„ํ• ํ•˜๊ณ  ๋ถ„ํ• ํ•œ ๋ฐฐ์—ด์„ ์žฌ๊ท€ ํ˜ธ์ถœ๋กœ ์ •๋ ฌํ•˜์—ฌ ํ•˜๋‚˜์˜ ๋ฐฐ์—ด๋กœ ๋งŒ๋“ ๋‹ค๋Š” ์ ์ด ํ•ฉ๋ณ‘์ •๋ ฌ๊ณผ ๋น„์Šทํ•˜์ง€๋งŒ, ์ขŒ/์šฐ๋ฅผ ๊ท ๋“ฑ๋ถ„ํ• ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋‹ค. pivot(๊ธฐ์ค€ ์›์†Œ)์„ ์„ ์ •ํ•˜์—ฌ pivot๋ณด๋‹ค ์ž‘์€ ์›์†Œ๋Š” ๋ชจ๋‘ ์™ผ์ชฝ ๋ฐฐ์—ด๋กœ, ํฌ๊ฑฐ๋‚˜ ๊ฐ™์€ ์›์†Œ๋Š” ๋ชจ๋‘ ์˜ค๋ฅธ์ชฝ ๋ฐฐ์—ด๋กœ ๊ฐ€๋„๋ก ๋ถ„ํ• ํ•œ๋‹ค.

์ถœ์ฒ˜: commons.wikimedia.org

* ์œ„์˜ ์ด๋ฏธ์ง€์—์„œ ๊ฒ€์€์ƒ‰ ๋ฐฐ๊ฒฝ์˜ ์ˆซ์ž๊ฐ€ pivot

 

ํŠน์ง•

โ–ช ๋ถˆ์•ˆ์ • ์ •๋ ฌ

โ–ช ๋น„๊ต ์ •๋ ฌ(๊ฐ’ ๋น„๊ต์— ๊ธฐ๋ฐ˜ํ•œ ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜)

โ–ช ์žฌ๊ท€ ํ˜ธ์ถœ์ด ํ•œ๋ฒˆ ์ง„ํ–‰๋  ๋•Œ๋งˆ๋‹ค ์ตœ์†Œํ•œ ํ•˜๋‚˜์˜ ์›์†Œ๋Š” ์œ„์น˜๊ฐ€ ๊ฒฐ์ •๋˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ˜๋“œ์‹œ ๋๋‚˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋ผ๋Š” ๊ฒƒ์„ ๋ณด์žฅ ๊ฐ€๋Šฅ

 

ํ๋ฆ„

โ‘  pivot ์„ ์ •

โ‘ก [๋ถ„ํ• ] pivot๋ณด๋‹ค ์ž‘์€ ์›์†Œ๋“ค์ด ์•ž์— ์˜ค๊ณ , ๋’ค์—๋Š” ๊ฐ’์ด ํฌ๊ฑฐ๋‚˜ ๊ฐ™์€ ๋ชจ๋“  ์›์†Œ๋“ค์ด ์˜ค๋„๋ก ๋ฐฐ์—ด์„ ๋‘˜๋กœ ๋ถ„ํ• 

โ‘ข [์ •๋ณต] ๋ถ€๋ถ„ ๋ฐฐ์—ด์„ ์ •๋ ฌ(๋ฐฐ์—ด์˜ ํฌ๊ธฐ๊ฐ€ ์ถฉ๋ถ„ํžˆ ์ž‘์ง€ ์•Š์„ ๊ฒฝ์šฐ ์ˆœํ™˜ ํ˜ธ์ถœ๋กœ ๋‹ค์‹œ ๋ถ„ํ•  ์ •๋ณต ์ ์šฉ)

โ‘ฃ [๋ณ‘ํ•ฉ] ์ •๋ ฌ๋œ ๋ถ€๋ถ„ ๋ฐฐ์—ด๋“ค์„ ํ•˜๋‚˜์˜ ๋ฐฐ์—ด๋กœ ํ•ฉ์น˜๊ธฐ

 

์žฌ๊ท€๋กœ ๊ตฌํ˜„ํ•œ ํ€ต ์ •๋ ฌ(C์–ธ์–ด)

#include <stdio.h>

void quickSort(int* data, int left, int right) {
	
	// ์›์†Œ๊ฐ€ 1๊ฐœ์ธ ๊ฒฝ์šฐ
	if (left >= right) {  
		return; 
	} 
	
	int pivot = left; 
	int i = pivot + 1;	// ์™ผ์ชฝ ์‹œ์ž‘ ์ง€์  
	int j = right;		// ์˜ค๋ฅธ์ชฝ ์‹œ์ž‘ ์ง€์  
	
	int temp; 
	
	// ๋ถ„ํ•  ๊ณผ์ •
	while(i <= j) { 
		while(i <= right && data[i] <= data[pivot]) { 
			i++; 
		} 
		
		while(j > left && data[j] >= data[pivot]) {
			j--; 
		} 
		
		// ๋ฐ”๊พธ๋Š” ์™€์ค‘์— i๊ฐ€ j๋ณด๋‹ค ์ปค์ง„ ๊ฒฝ์šฐ
		if(i > j) { 
			temp = data[j]; 
			data[j] = data[pivot];	// j๋ฒˆ์งธ ์›์†Œ์™€ pivot ๊ต์ฒด
			data[pivot] = temp; 
		}
		else { 
			// i๋ฒˆ์งธ, j๋ฒˆ์งธ ์œ„์น˜ ๋ฐ”๊พธ๊ธฐ 
			temp = data[i]; 
			data[i] = data[j]; 
			data[j] = temp; 
		} 
		printf("\n");
	} 
	
	quickSort(data, left, j - 1);	// ์™ผ์ชฝ ๋ฐฐ์—ด์— ๋Œ€ํ•ด ํ€ต ์ •๋ ฌ ๋‹ค์‹œ ์ ์šฉ
	quickSort(data, j + 1, right);	// ์˜ค๋ฅธ์ชฝ ๋ฐฐ์—ด์— ๋Œ€ํ•ด ํ€ต ์ •๋ ฌ ๋‹ค์‹œ ์ ์šฉ
} 

int main() { 
	int input[8] = { 15, 22, 13, 27, 12, 10, 20, 25 };
	
	printf("์ •๋ ฌ ์ „ ๋ฐฐ์—ด: ");

	for (int i = 0; i < 8; i++) {
		printf("%d ", input[i]);
	}

	quickSort(input, 0, 7);

	printf("\n์ •๋ ฌ ํ›„ ๋ฐฐ์—ด: ");

	for(int i=0; i<8; i++) { 
		printf("%d ", input[i]); 
	} 
}

 

๐Ÿ”Ž ์ฐธ๊ณ  ๋ธ”๋กœ๊ทธ

โ–ช ehpub.co.kr/%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-c%EC%96%B8%EC%96%B4-3-3-2-%ED%80%B5-%EC%A0%95%EB%A0%AC-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-%EA%B5%AC%ED%98%84/

โ–ช prosto.tistory.com/177