1. ํต์ ๋ ฌ(Quick Sort) ์๊ณ ๋ฆฌ์ฆ
- ๋ถํ ์ ๋ณต ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉ, ์ผ์ ํ์ง ์์ ํํ๋ก ๋ถํ . ์ํ์๋ ๋น ๋ฆ
→ ๋ฌธ์ ๋ฅผ ๋๋ ์ ์์ ๋๊น์ง ๋๋์ด์ ๊ฐ๊ฐ์ ํ๋ฉด์ ๋ค์ ํฉ๋ณํ์ฌ ๋ฌธ์ ์ ๋ต์ ์ป๋ ์๊ณ ๋ฆฌ์ฆ - ํผ๋ด(pivot)์ด๋ผ ๋ถ๋ฅด๋ ๋ฐฐ์ด ์์๋ฅผ ๊ธฐ์ค์ผ๋ก ํผ๋ด๋ณด๋ค ์์ ๊ฐ์ ์ผ์ชฝ, ํฐ ๊ฐ์ ์ค๋ฅธ์ชฝ์ผ๋ก ์์นํ๋๋ก ๋ถํ .
์ด ๊ณผ์ ์ ํตํด ๋ถํ ๋ ์ผ์ชฝ ๋ฐฐ์ด๊ณผ ์ค๋ฅธ์ชฝ ๋ฐฐ์ด์๋ ๋์ผํ ๊ณผ์ ์ ์ํ. ์ด๋ฅผ ๋ฐ๋ณตํ๋ฉด ์ ๋ ฌ๋๋ ๋ฐฉ์.
→ ์ฃผ์ : ํผ๋ด์ ๋ถํ ๋ ์ผํธ์ด๋ ์ค๋ฅธํธ์ ํฌํจ๋์ง ์์.
1-1. ํต์ ๋ ฌ์ ํผ๋ด ์ ์ ๋ฐฉ๋ฒ
- โ ๋๋คํ๊ฒ ์ ์ ํ๋ ๋ฐฉ๋ฒ
- โก 3๊ฐ์ ์ซ์์ ์ค์ ๊ฐ์ผ๋ก ์ ์ ํ๋ ๋ฐฉ๋ฒ
→ ๊ฐ์ฅ ์ผ์ชฝ ์ซ์ / ์ค๊ฐ์ซ์ / ๊ฐ์ฅ ์ค๋ฅธ์ชฝ์ซ์ ์ค์์ ์ค์๊ฐ์ผ๋ก ํผ๋ด์ ์ ํจ - โข Median-of-Medians
→ ๋ฐฐ์ด์ 3๋ฑ๋ถ ํ, ๊ฐ ๋ถ๋ถ์์ ๊ฐ์ฅ ์ผ์ชฝ ์ซ์ / ์ค๊ฐ ์ซ์ / ๊ฐ์ฅ ์ค๋ฅธ์ชฝ ์ซ์ ์ค์์ ์ค์๊ฐ์ ์ฐพ์ ํ,
์ธ ์ค์๊ฐ๋ค ์ค์์ ์ค์๊ฐ์ผ๋ก ํผ๋ด์ ์ ํจ
2. ํต์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ์ ๊ตฌํ
# include <stdio.h>
# define LEN 7
void quickSort(int arr[], int L, int R) {
int left = L, right = R;
int pivot = arr[(L + R) / 2]; // pivot ์ค์ (๊ฐ์ด๋ฐ)
int temp;
do
{
while (arr[left] < pivot) // left๊ฐ pivot๋ณด๋ค ํฐ ๊ฐ์ ๋ง๋๊ฑฐ๋ pivot์ ๋ง๋ ๋๊น์ง
left++;
while (arr[right] > pivot) // right๊ฐ pivot๋ณด๋ค ์์ ๊ฐ์ ๋ง๋๊ฑฐ๋ pivot์ ๋ง๋ ๋๊น์ง
right--;
if (left<= right) // left๊ฐ right๋ณด๋ค ์ผ์ชฝ์ ์๋ค๋ฉด ๊ตํ
{
temp = arr[left];
arr[left] = arr[right];
arr[right] = temp;
/*left ์ค๋ฅธ์ชฝ์ผ๋ก ํ์นธ, right ์ผ์ชฝ์ผ๋ก ํ์นธ ์ด๋*/
left++;
right--;
}
} while (left<= right); // left๊ฐ right ๋ณด๋ค ์ค๋ฅธ์ชฝ์ ์์ ๋๊น์ง ๋ฐ๋ณต
/* recursion */
if (L < right)
quickSort(arr, L, right); // ์ผ์ชฝ ๋ฐฐ์ด ์ฌ๊ท์ ์ผ๋ก ๋ฐ๋ณต
if (left < R)
quickSort(arr, left, R); // ์ค๋ฅธ์ชฝ ๋ฐฐ์ด ์ฌ๊ท์ ์ผ๋ก ๋ฐ๋ณต
}
int main(){
int i;
int arr[LEN] = {5,1,6,3,4,2,7};
printf("์ ๋ ฌ ์ : ");
for(i=0; i<LEN; i++){
printf("%d ", arr[i]);
}
printf("\n");
quickSort(arr, 0, LEN-1);
printf("์ ๋ ฌ ํ : ");
for(i=0; i<LEN; i++){
printf("%d ", arr[i]);
}
return 0;
}
3. ํต์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ์ ํน์ง
3-1. ์ฅ์
- ์ปค๋ค๋ ํฌ๊ธฐ์ ์ ๋ ฅ์ ๋ํด์ ๊ฐ์ฅ ์ข์ ์ฑ๋ฅ
- ์ ๋ ฌํ๊ณ ์ ํ๋ ๋ฐฐ์ด ์์์ ๊ตํํ๋ ๋ฐฉ์์ด๋ฏ๋ก, ๋ค๋ฅธ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ํ์๋ก ํ์ง ์์
3-2. ๋จ์
- ๋ถ์์ ์ ๋ ฌ์ด๋ค.
- ์ ๋ ฌ๋ ๋ฐฐ์ด์ ๋ํด์๋ ํต์ ๋ ฌ์ ๋ถ๊ท ํ ๋ถํ ์ ์ํด ์ํ์๊ฐ์ด ์คํ๋ ค ๋ ๋ง์ด ๊ฑธ๋ฆผ
์ฐธ๊ณ ) https://bblackscene21.tistory.com/9
[ ์๊ณ ๋ฆฌ์ฆ ๊ณต๋ถ ] ํต์ ๋ ฌ ํต์ํธ(Quick Sort) - ๋ถํ ์ ๋ณต ์๊ณ ๋ฆฌ์ฆ(feat. python ํ์ด์ฌ)
ํต ์ ๋ ฌ์ด๋? ํต ์ ๋ ฌ๋ ๋ถํ ์ ๋ณต ์๊ณ ๋ฆฌ์ฆ์ ๋๋ค. 2๊ฐ์ ๋ฌธ์ ๋ก ๋ถํ ํฉ๋๋ค. ํฉ๋ณ ์ ๋ ฌ(Merge Sort) ๊ฐ์ ๊ฒฝ์ฐ์๋ 2๊ฐ์ ๋ฌธ์ ๋ก ๋ถํ ํ ๋, ๋ฌธ์ ์ ํฌ๊ธฐ๊ฐ ํญ์ ๊ฐ์์ง๋ง, ํต ์ ๋ ฌ์ ์ผ์ ํ์ง ์
bblackscene21.tistory.com
์ฐธ๊ณ ) https://gyoogle.dev/blog/algorithm/Quick%20Sort.html
ํต ์ ๋ ฌ(Quick Sort) | ๐จ๐ป๐ป Tech Interview
ํต ์ ๋ ฌ(Quick Sort) Goal Quick Sort์ ๋ํด ์ค๋ช ํ ์ ์๋ค. Quick Sort ๊ณผ์ ์ ๋ํด ์ค๋ช ํ ์ ์๋ค. Quick Sort์ ๊ตฌํํ ์ ์๋ค. Quick Sort์ ์๊ฐ๋ณต์ก๋์ ๊ณต๊ฐ๋ณต์ก๋๋ฅผ ๊ณ์ฐํ ์ ์๋ค. Quick Sort์ ์ต์ ์ธ
gyoogle.dev
'CS > ์๊ณ ๋ฆฌ์ฆ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์๊ณ ๋ฆฌ์ฆ] ์์ด๊ณผ ์กฐํฉ (0) | 2023.01.16 |
---|---|
[์๊ณ ๋ฆฌ์ฆ] ํฌํฌ์ธํฐ (0) | 2023.01.16 |
[์๊ณ ๋ฆฌ์ฆ] #4. ์ฝ์ ์ ๋ ฌ (0) | 2023.01.15 |
[์๊ณ ๋ฆฌ์ฆ] #3. ์ ํ์ ๋ ฌ (0) | 2023.01.15 |
[์๊ณ ๋ฆฌ์ฆ] #2. ๋ฒ๋ธ์ ๋ ฌ(๊ฑฐํ์ ๋ ฌ) (0) | 2023.01.14 |