ํ”„๋กœ๊ทธ๋ž˜๋ฐ/Algorithm

[์•Œ๊ณ ๋ฆฌ์ฆ˜] ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜ - ์นตํ…Œ์ผ ์…ฐ์ด์ปค ์ •๋ ฌ Cocktail Shaker Sort

NaNaRin๐Ÿ™ƒ 2021. 1. 24. 15:31

 

์นตํ…Œ์ผ ์…ฐ์ด์ปค ์ •๋ ฌ (Cocktail Shaker Sort) ์•Œ๊ณ ๋ฆฌ์ฆ˜ : 

์นตํ…Œ์ผ ์…ฐ์ด์ปค ์ •๋ ฌ(Cocktail Shaker Sort) = ์–‘๋ฐฉํ–ฅ ๋ฒ„๋ธ” ์ •๋ ฌ(Bidirectional Bubble Sort) 

= ์…ฐ์ด์ปค ์ •๋ ฌ(Shaker Sort) = ์นตํ…Œ์ผ ์ •๋ ฌ(Cocktail Sort)

๋ฒ„๋ธ” ์ •๋ ฌ ์˜ ๋ณ€ํ˜•. ๋ฒ„๋ธ” ์ •๋ ฌ๊ณผ๋Š” ๋‹ฌ๋ฆฌ ๋งค ํŒจ์Šค๋งˆ๋‹ค ๋ฆฌ์ŠคํŠธ์˜ ์ˆœ์„œ๋ฅผ ๋ฐ”๊ฟ” ์ •๋ ฌ

 

ํ™€์ˆ˜ ๋ฒˆ์งธ์˜ ํŒจ์Šค๋Š” ๊ฐ€์žฅ ์ž‘์€ ์š”์†Œ๋ฅผ ๋งจ ์•ž์œผ๋กœ, ์ง์ˆ˜ ๋ฒˆ์งธ์˜ ํŒจ์Šค๋Š” ๊ฐ€์žฅ ํฐ ์š”์†Œ๋ฅผ ๋งจ ๋’ค๋กœ ์ •๋ ฌ or

ํ™€์ˆ˜ ๋ฒˆ์งธ์˜ ํŒจ์Šค๋Š” ๊ฐ€์žฅ ํฐ ์š”์†Œ๋ฅผ ๋งจ ๋’ค๋กœ, ์ง์ˆ˜ ๋ฒˆ์งธ์˜ ํŒจ์Šค๋Š” ๊ฐ€์žฅ ์ž‘์€ ์š”์†Œ๋ฅผ ๋งจ ์•ž์œผ๋กœ ์ •๋ ฌ

 

์ถœ์ฒ˜ : ์œ„ํ‚ค๋ฐฑ๊ณผ

 

์ฒซ๋ฒˆ์งธ ํŒจ์Šค๊ฐ€ ์™„๋ฃŒ๋˜๋ฉด ๊ฐ€์žฅ ์ž‘์€ ์š”์†Œ๊ฐ€ ๋งจ ์•ž์œผ๋กœ ์ด๋™ํ•˜๊ธฐ ๋•Œ๋ฌธ์—

๋‘๋ฒˆ์งธ ํŒจ์Šค๋Š” ๋งจ ์•ž์˜ ์š”์†Œ๋ฅผ ์ œ์™ธํ•˜๊ณ  ์•ž -> ๋’ค ๋ฐฉํ–ฅ์œผ๋กœ ์ง„ํ–‰๋˜๊ณ ,

๋‘๋ฒˆ์งธ ํŒจ์Šค๊ฐ€ ์™„๋ฃŒ๋˜๋ฉด ๊ฐ€์žฅ ํฐ ์š”์†Œ๊ฐ€ ๋งจ ๋’ค๋กœ ์ด๋™ํ•˜๊ธฐ ๋•Œ๋ฌธ์—

์„ธ๋ฒˆ์งธ ํŒจ์Šค๋Š” ์–‘ ๋์˜ ๋‘ ์š”์†Œ๋ฅผ ์ œ์™ธํ•˜๊ณ  ๋’ค -> ์•ž ๋ฐฉํ–ฅ์œผ๋กœ ์ง„ํ–‰๋œ๋‹ค.

=> ํŒจ์Šค๊ฐ€ ํ•œ๋ฒˆ์”ฉ ์ง„ํ–‰๋  ๋•Œ ๋งˆ๋‹ค ์ •๋ ฌ์—์„œ ์ œ์™ธ๋˜๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ์–‘ ๋์—์„œ ๋ฒˆ๊ฐˆ์•„ ํ•˜๋‚˜์”ฉ ์ œ์™ธ๋œ๋‹ค

 

 

๋ฉ”์„œ๋“œ swap() : a[idx1] ๊ณผ a[idx2] ๋ฅผ ๊ตํ™˜

๋งค๊ฐœ๋ณ€์ˆ˜ : int[] a, int idx1, int idx2

 

๋ฉ”์„œ๋“œ CockTailSort() : ๊ธธ์ด๊ฐ€ n์ธ ๋ฐฐ์—ด a๋ฅผ ์นตํ…Œ์ผ ์ •๋ ฌ

๋งค๊ฐœ๋ณ€์ˆ˜ : int[] a, int n

 

- ์นตํ…Œ์ผ ์ •๋ ฌ :

void swap(int[] a, int idx1, int idx2) {
	int t = a[idx1];
	a[idx1] = a[idx2];
	a[idx2] = t;
}
	
void CocktailSort(int[] a, int n) {
	int i = 1;
	int l = 0;
	int r = n-1;
	int last = n-1;
	while(l != r) {
		if(i % 2 == 1) {
			for(int j = r; j > l; j--) {
				if(a[j-1] > a[j]) {
					swap(a, j-1, j);
					last = j;
				}
			}
			l = last;
		} else if (i % 2 == 0) {
			for(int j = l; j < r; j++) {
				if(a[j] > a[j+1]) {
					swap(a, j, j+1);
					last = j;
				}
			}
			r = last;
		}
		i++;
	}
}

 

 

 

 

์นตํ…Œ์ผ ์‰์ด์ปค ์ •๋ ฌ Cocktail Shaker Sort :

์ตœ์„  = O(N), ํ‰๊ท  = ์ตœ์•… = O(N^2)

์•ˆ์ •๋œ ์ •๋ ฌ