์๋ ํ์ธ์ ์ฃผ์ธ์ฅ H์ ๋๋ค.
์ค๋์ ํต์ ๋ ฌ์ ๋ํด ์์๋ณด๊ฒ ์ต๋๋ค.
์ง๊ธ๊น์ง ๋ฐฐ์ด ์ ๋ ฌ์ ์๊ฐ๋ณต์ก๋ O(N^2)๋ฅผ ๊ฐ์ง ์๊ณ ๋ฆฌ์ฆ ์ด์์ต๋๋ค. ์ฒ๋ฆฌํ ๋ฐ์ดํฐ๊ฐ ๋ง๋ค๋ฉด
์ฌ์ฉํ๊ธฐ์ ๋ถ๋ด์ด ๋๊ฒ ์ง์. ๊ทธ๋ ๊ธฐ์ ๋ํ์ ์ธ ๋น ๋ฅธ ์๊ณ ๋ฆฌ์ฆ์ด ๋ฐ๋ก ํต์ ๋ ฌ์ ๋๋ค.
ํต์ ๋ ฌ์ ๋ํ์ ์ธ ๋ถํ ์ ๋ณต ์๊ณ ๋ฆฌ์ฆ์ผ๋ก์ ํ๊ท ์๋๊ฐ O(N*log N)์ ๋๋ค.
1~10๊น์ง์ ๋ฌด์ง์ํ ์ซ์๋ฅผ ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ฆฌํ๋ค๊ณ ํ ๋,
ํต ์ ๋ ฌ์ ํ๋์ ํฐ ๋ฌธ์ ๋ฅผ ๋ ๊ฐ์ ์์ ๋ฌธ์ ๋ก ๋ถํ ํ๋ ์์ผ๋ก ๋น ๋ฅด๊ฒ ์ ๋ ฌํฉ๋๋ค.
ํน์ ํ ๊ฐ(ํผ๋ฒpivot)์ ๊ธฐ์ค์ผ๋ก ํฐ ์ซ์์ ์์ ์ซ์๋ฅผ ์๋ก ๊ตํํ ๋ค์ ๋ฐฐ์ด์ ๋ฐ์ผ๋ก ๋๋๋๋ค.
์๋ฅผ๋ค์ด (1) 10 5 8 7 6 4 3 2 9 ๋ผ๋ ์ซ์๊ฐ ์๋ค๊ณ ๊ฐ์ ํฉ๋๋ค.
์ด ๊ฒฝ์ฐ 1๋ณด๋ค ํฐ ์ซ์๋ฅผ ์ผ์ชฝ์์, 1๋ณด๋ค ํฐ ์ซ์๋ฅผ ์ค๋ฅธ์ชฝ์์ ์ฐพ์ต๋๋ค.
1๋ณด๋ค ์์ ์ซ์๋ ์ฐจ์ง ๋ชปํด์ 1๊น์ง ๋๋ฌํฉ๋๋ค. ์ด๋ ์์ ๊ฐ์ ์ธ๋ฑ์ค๊ฐ ํฐ ๊ฐ์ ์ธ๋ฑ์ค๋ณด๋ค ์์ผ๋ฏ๋ก
ํผ๋ฒ ๊ฐ๊ณผ ์์ ๊ฐ์ ์์น๋ฅผ ๋ฐ๊ฟ๋๋ค. ์ฆ, 1๊ณผ 1์ ์๋ก ๊ตํํฉ๋๋ค.
3 7 8 1 5 9 6 10 2 4
3์ ํผ๋ฒ๊ฐ์ผ๋ก ์ค์ ํ๋ค๋ฉด
์ผ์ชฝ์์ ์ค๋ฅธ์ชฝ์ผ๋ก ํฐ๊ฐ, ์ค๋ฅธ์ชฝ์์ ์ผ์ชฝ์ผ๋ก ๊ฐ๋ ์์๊ฐ์ ์ฐพ์ต๋๋ค.
๊ทธ๋ ๊ฒ ๋๋ฉด 7 ๊ณผ 2๊ฐ ์ ํ๋๋๋ฐ ๋ ๊ฐ์ ๋ณ๊ฒฝํด์ค๋๋ค.
3 2 8 1 5 9 6 10 7 4
ํผ๋ฒ๊ฐ์ ๋์ผํ๊ตฌ์. ๋ค์ ์งํ์ ํ๋ฉด 3๋ณด๋ค ํฐ ๊ฐ 8, ์์๊ฐ 1์ ์ฐพ์ต๋๋ค.
3 2 1 8 5 9 6 10 7 4
์ด๋ฒ์ ํฐ ๊ฐ์ด 8, ์์ ๊ฐ์ด 1. ์ธ๋ฑ์ค๊ฐ ์๋ก ์๊ฐ๋ฆฝ๋๋ค. ์ด๋ด๋ ์์๊ฐ๊ณผ ํผ๋ฒ๊ฐ์ ์๋ก ๊ตํํด์ค๋๋ค.
1 2 3 8 5 9 6 10 7 4
์ด๋ ๊ฒ ๋๋ฉด 3์ ๊ธฐ์ค์ผ๋ก ์ผ์ชฝ๊ณผ ์ค๋ฅธ์ชฝ ๊ทธ๋ฃน์ผ๋ก ๋๋์ด ์งํํฉ๋๋ค.
์ผ์ชฝ์์ ํฐ๊ฐ, ์ค๋ฅธ์ชฝ์์ ์์๊ฐ์ ์ฐพ์ต๋๋ค. ์ด๋ ์๊ฐ๋ฆฌ๊ธฐ ๋๋ฌธ์ 1๊ณผ 1์ ๊ตํํด์ค๋๋ค.
1 2 3 8 5 9 6 10 7 4
์ด์ 2๋ ๋ฐ์ดํฐ๊ฐ 1๊ฐ์ด๊ธฐ ๋๋ฌธ์ ์๋์ ๊ฐ์ด 1 2 3 ์ด ์ ๋ ฌ๋์์ต๋๋ค.
1 2 3 8 5 9 6 10 7 4
์ด์ ์ค๋ฅธ์ชฝ๋ 8์ ํผ๋ฒ์ผ๋ก ํ์ฌ ๋ค์ ํต์ ๋ ฌ์ ์งํํ๋๋ฐ์
8๋ณด๋ค ํฐ๊ฐ 9, ์์๊ฐ 4 ์ธ๋ฑ์ค๊ฐ ์๊ฒน์น๋ ์๋ก ๋ฐ๊ฟ ์ค๋๋ค.
1 2 3 8 5 4 6 10 7 9
8๋ณด๋ค ํฐ ๊ฐ 10, ์์๊ฐ 7. ์๋ก ๋ฐ๊ฟ์ค๋๋ค. ์ธ๋ฑ์ค๊ฐ ๊ฒน์น์ง ์์ผ๋ ํผ๋ฒ์ ๊ทธ๋๋ก์ ๋๋ค.
1 2 3 8 5 4 6 7 10 9
์ด์ ํฐ๊ฐ 10, ์์๊ฐ 7 ์ธ๋ฑ์ค๊ฐ ๊ฒน์น๋ 8๊ณผ 7์ ๊ตํ ํด์ค๋๋ค.
1 2 3 7 5 4 6 8 10 9
์ด์ ๋ค์ 8์ ๊ธฐ์ค์ผ๋ก ์ผ์ชฝ ๊ทธ๋ฃน๊ณผ ์ค๋ฅธ์ชฝ ๊ทธ๋ฃน์ ์งํํ๋ฉด ๋ฉ๋๋ค.
7 5 4 6 ๊ทธ๋ฃน์ ์งํํ๋ฉด 7๋ณด๋ค ํฐ๊ฐ์ ์ฐพ์ง ๋ชปํ๊ธฐ ๋๋ฌธ์ ๋๊น์ง ๊ฐ๊ณ ,
์ค๋ฅธ์ชฝ์์ 6, ์ธ๋ฑ์ค๊ฐ ๊ฒน์น๋ ์์๊ฐ๊ณผ ํผ๋ฒ๊ฐ์ ๊ตํํด์ค๋ค.
1 2 3 6 5 4 7 8 10 9
6์ ๊ธฐ์ค์ผ๋ก ์ค๋ฅธ์ชฝ์ผ๋ก ํฐ๊ฐ์ด ์๋ค. ์ผ์ชฝ์ผ๋ก 4๊ฐ ์ ํ ๊ทธ๋ผ 6๊ณผ 4๋ฅผ ์๋ก ๋ณ๊ฒฝํด์ฃผ๋ฉด,
1 2 3 4 5 6 7 8 10 9
์ดํ์ ์ค๋ช ์ ์๋ตํ๊ณ ๊ณ์ ์งํํ๊ฒ ์ต๋๋ค.
1 2 3 4 5 6 7 8 10 9
1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7 8 9 10
ํ์ง๋ง ํต์ ๋ ฌ์ด ์ธ์ ๋ ๋น ๋ฅผ๊ฐ์?
ํต ์ ๋ ฌ์ ์๊ฐ ๋ณต์ก๋๋ ๋ ๊ทธ๋ฃน์ผ๋ก ๋๋์ด ์งํํ๊ธฐ ๋๋ฌธ์ O(N*log N)์ ๋๋ค. ํ์ง๋ง
์ต์ ์ ๊ฒฝ์ฐ, ์ด๋ฏธ ์ ๋ ฌ์ด ๊ฑฐ์ ๋ค ๋์ด ์๋ ๊ฒฝ์ฐ ์๊ฐ ๋ณต์ก๋๋ O(N^2)์ ๊ฐ๊น์ต๋๋ค.
#include <stdio.h>
int data[] = { 4,10,5,3,2,9,7,8,6,1 };
int number = 10;
quickSort(int* data, int start, int end) {
if (start >= end) {
return;
}
int key = start; //key๋ ์ฒซ ๋ฒ์งธ ์์
int i = start + 1;
int j = end;
int temp;
while (i <= j) { //์๊ฐ๋ฆด๋ ๊น์ง ๋ฐ๋ณต
//ํค๊ฐ๋ณด๋ค ํฐ ๊ฐ์ ๋ง๋ ๋
while (i <= end && data[i] <= data[key]) {
i++;
}
while (data[j] >= data[key]) {
j--;
}
//ํ์ฌ ์๊ฐ๋ฆฐ ์ํ๋ฉด ํค ๊ฐ๊ณผ ๊ต์ฒด
if (i > j) {
temp = data[j];
data[j] = data[key];
data[key] = temp;
}
//์๊ฐ๋ฆฌ์ง ์์๋ค๋ฉด i์ j๋ฅผ ๊ต์ฒด
else {
temp = data[i];
data[i] = data[j];
data[j] = temp;
}
}
quickSort(data, start, j - 1);
quickSort(data, j + 1, end);
}
int main(void) {
quickSort(data, 0, number - 1);
for (int i = 0; i < number; i++) {
printf("%d", data[i]);
}
return 0;
}
'์๋ฃ๊ตฌ์กฐ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์๋ฃ๊ตฌ์กฐ] c++ sortํจ์๋ฅผ ํ์ฉํ ์ ๋ ฌ (0) | 2020.08.12 |
---|---|
[์๋ฃ๊ตฌ์กฐ] ๋ณํฉ์ ๋ ฌ merge sort (0) | 2020.08.06 |
[์๋ฃ๊ตฌ์กฐ] ๋ฒ๋ธ์ ๋ ฌ Bubble Sort (0) | 2020.08.04 |
Insertion Sort ์ฝ์ ์ ๋ ฌ (0) | 2020.08.04 |
Selection Sort ์ ํ์ ๋ ฌ (0) | 2020.08.04 |