๐ก ์ด๋ฒ์๋ ํต ์ ๋ ฌ ํ๋ ๋ฒ์ ๋ฐฐ์๋ณด์๋ค.
๋ฌธ์
๐ก ์ฌ์ฉ์๊ฐ ์ ๋ ฅํ ๊ฐ์ด ์ค๋ฆ์ฐจ์์ผ๋ก ํต ์ ๋ ฌ ๋๊ฒ ์ฝ๋๋ฅผ ๊ตฌํํ์์ค
๋น์ฐํ ์๋ ๋ฌธ์ ๊ธฐ์ ๋์ถฉ ๋ด๊ฐ ๋ง๋ค์๋ค.
ํด๋ต
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#define SIZE 1000
int a [SIZE];
int swap(int *a, int *b) {
int temp = *a;
*a = *b;
*b = temp;
}
void quickSort(int start, int end) {
if (start >= end) {
return;
}
int key = start;
int i = start + 1;
int j = end;
int temp;
while (i <= j) {
while (i <= end && a[i] <= a[key]) {
i++;
}
while (j > start && a[j] >= a[key]) {
j--;
}
if (i > j) {
swap(&a[key], &a[j]);
} else {
swap(&a[i], &a[j]);
}
}
quickSort(start, j - i);
quickSort(j + 1, end);
}
int main(void) {
int n;
scanf("%d", &n);
for (int i = 0 ; i < n ; i++) {
scanf("%d", &a[i]);
}
quickSort(0, n - 1);
for (int i = 0 ; i < n ; i++) {
printf("%d ", a[i]);
}
return 0;
}
์ค๋ช
[C์ธ์ด ์ ํ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ] ์ ํ์ ๋ ฌ ๊ตฌํํ๊ธฐ ์ [C์ธ์ด ์ ํ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ] ์ฝ์ ์ ๋ ฌ ๊ตฌํํ๊ธฐ ์์ ๋๋์ฒด main ์์ n ์ด ๋ฌด์์ธ์ง ๋ชจ๋ฅด๊ฒ ๋ค๊ณ ์ผ์๋๋ฐ ์ด์ ์ผ ๊นจ๋ฌ์๋ค.
๋ค์ด๊ฐ ์์์ ๊ฐ์๋ฅผ ์จ์ฃผ๋ ๊ฒ์ด์๋ค. (๊ทผ๋ฐ ์ ์จ์ฃผ๊ณ ๋ค๋ฅธ ๊ฐ ์จ๋ ์ ๋์๊ฐ๋๋ฐ..?)
quick ์ ๋ ฌ์ด๋?
ํผ๋ฒ์ ๊ธฐ์ค์ผ๋ก ํฐ ๊ฐ๊ณผ ์์ ๊ฐ์ ์๋ก ๊ต์ฒดํ๋ ์ ๋ ฌ ๊ธฐ๋ฒ์ด๋ค.
๊ฐ์ ์๋ก ๊ต์ฒดํ๋ ๋ฐ์ $N$๋ฒ, ์๊ฐ๋ฆฐ ๊ฒฝ์ฐ ๊ต์ฒด ์ดํ์ ์์๊ฐ ๋ฐ์ผ๋ก ๋๋์ด์ง๋ฏ๋ก ์ ์ฒด ์์๋ฅผ ๋๋๋ ๋ฐ์ ํ๊ท ์ ์ผ๋ก $logN$๋ฒ์ด ์์๋๋ฏ๋ก ํ๊ท ์ ์ผ๋ก ๐(๐๐๐๐๐)์ ์๊ฐ ๋ณต์ก๋๋ฅผ ๊ฐ์ง๋ค.
5(ํผ๋ฒ)4389671102
5(ํผ๋ฒ) | 4 | 3 | 2 | 9 | 6 | 7 | 1 | 10 | 8 |
5(ํผ๋ฒ) | 4 | 3 | 2 | 1 | 6 | 7 | 9 | 10 | 8 |
5(ํผ๋ฒ) | 4 | 3 | 2 | 1 | 6 | 7 | 9 | 10 | 8 |
๋ง์ง๋ง ํ์์ 6์ ์ค๋ฅธ์ชฝ ๊ฐ์๋ ์ ๋ ฌํ ๊ฒ์ด ์๊ณ , 1๊ณผ ์๊ฐ๋ฆฌ๊ฒ ๋๋ค.
๊ทธ๋์ ์ฌ๊ธฐ์ ์ ์ฒด ์์๋ฅผ ๋๋๊ฒ ๋๋ค.
1(ํผ๋ฒ)43256(ํผ๋ฒ)79108
์์๋ฅผ ์ ๋ฐ์ฉ ๋๋ ๋ ๐๐๐๐์ ์๊ฐ ๋ณต์ก๋๊ฐ ๋์ค๋ ๋ํ์ ์ธ ์์๋ ์์ ์ด์ง ํธ๋ฆฌ์ด๋ฉฐ ์์ ์ด์ง ํธ๋ฆฌ๋ ์ปดํจํฐ ๊ณตํ์์ ๊ฐ์ฅ ์ ํธํ๋ ์ด์์ ์ธ ํํ์ด๋ค.
swap ํจ์
int swap(int *a, int *b) {
int temp = *a;
*a = *b;
*b = temp;
}
์ด ํจ์๋ ์ฝ์ ์ ๋ ฌ๊ณผ ์ ํ์ ๋ ฌ์์ ์ผ๋ ๊ฒ ์ฒ๋ผ ๊ทธ ์ด์ธ์๋ ์์ฃผ ๋ง์ด ์ฐ์ด๋ ๊ณณ์ด ๋ง๋ค.
swap ํจ์ ์ ๋๋ ์ธ์๋๋ ๊ฒ์ด ์ข์ ๊ฒ ๊ฐ๋ค.
quickSort ํจ์
void quickSort(int start, int end) {
if (start >= end) { // ์์๊ณผ ๋์ด ๊ฐ์ ๊ฐ์ด๋ฉด ์ ๋ ฌ ํ ํ์๊ฐ ์๋ค.
return;
}
int key = start; // ํผ๋ฒ๊ฐ์ ๋ถ๋ถ๋ฐฐ์ด์ ์ฒซ๋ฒ์งธ ์์๊ฐ ๋๋๋ก ๋ง๋ค์ด์ค๋ค.
int i = start + 1; // ์ผ์ชฝ์์ ์ถ๋ฐ(ํผ๋ฒ๊ฐ์ ํ๋ ์ค๋ฅธ์ชฝ ๊ฐ๋ถํฐ ์ถ๋ฐ)
int j = end; // ์ค๋ฅธ์ชฝ์์ ์ถ๋ฐ
int temp;
while (i <= j) { // ์๊ฐ๋ฆด ๋๊น์ง ๋ฐ๋ณตํ๋ค. i๊ฐ j๋ณด๋ค ์ปค์ก์ ๋๋ ์๊ฐ๋ฆฐ ์๊ฐ์ด๊ธฐ ๋๋ฌธ์ด๋ค.
while (i <= end && a[i] <= a[key]) {
// ์ผ์ชฝ์์ ์ถ๋ฐํ i๊ฐ end๋ณด๋ค ์๊ฑฐ๋ ๊ฐ๊ฑฐ๋ a[i]๊ฐ a[key] ๋ณด๋ค ์๊ณ ๊ฐ์ผ๋ฉด ์ค๋ฅธ์ชฝ์ผ๋ก ์ด๋
i++;
}
while (j > start && a[j] >= a[key]) {
// ์ค๋ฅธ์ชฝ์์ ์ถ๋ฐํ j๊ฐ start ํฌ๊ณ a[j]๊ฐ a[key]๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ์ผ๋ฉด ์ผ์ชฝ์ผ๋ก ์ด๋
j--;
}
// i์ j๊ฐ ์๊ฐ๋ฆฐ ์ํ๋ผ๋ฉด ์ค์
if (i > j) {
swap(&a[key], &a[j]);
} else {
swap(&a[i], &a[j]);
}
}
// ์ฌ๊ท์ ์ผ๋ก ๋๋ฒ ํธ์ถํ๊ฒ ๋ง๋ฆ
quickSort(start, j - i);
quickSort(j + 1, end);
}
์์งํ ์ดํดํ์๋ฉด ์ดํด ํ ๋งํ ์ฝ๋์ธ๋ฐ ํ๋ ํ๋ ์ฐ์ด๋ณด๋ฉด์ ์ ์ฌ๊ท์ ์ผ๋ก ๋ ๋ฒ ํธ์ถํ๋ ๊ฒ์ธ์ง ๋ฑ์ ๋ ์์ธํ๊ฒ ์์์ผ๋ฉด ์ข์๊ฒ ๋ค ์ถ๋ค.
๊ทธ๋ฌ์ง ์์๋ ์ด์ ๋ ์๊ฐ์ ์ธ ๋ฌธ์ ๋ ์์๊ณ , ์ด๋์ ์ด๋ป๊ฒ ์ฐ์ด์ผ ๋ ์ง๋ ๋ชจ๋ฅด๊ฒ ๊ณ …
์ฝ๋๋ฅผ ๋ดค์ ๋ quickSort(start, j - i); ์ ์ผ์ชฝ์ ๋ค์ ์ ๋ ฌํ๋ ๊ฒ์ด๊ณ quickSort(j + 1, end); ์ ์ค๋ฅธ์ชฝ์ ๋ค์ ์ ๋ ฌํ๋ ์ฝ๋ ๊ฐ์๋ฐ j ์ ์ญํ ์ด ๊ถ๊ธํ๋ค.
main ํจ์
int main(void) {
int n;
scanf("%d", &n); // ์์์ ๊ฐ์๊ฐ ๋ค์ฏ๊ฐ์ธ ๊ฒ์ ์๋ ค์ฃผ๋ ๊ฒ์ด๋ค.
for (int i = 0 ; i < n ; i++) { // a์ ๊ฐ์ ๋ฃ์ด์ค๋ค.
scanf("%d", &a[i]);
}
quickSort(0, n - 1); // ์ธ๋ฑ์ค๋ 0๋ถํฐ์ด๊ธฐ ๋๋ฌธ์ n - 1 ํด์ค๋ค.
for (int i = 0 ; i < n ; i++) {
printf("%d ", a[i]);
}
return 0;
}
๋ง์น๋ฉฐ..
ํ์ฌ์์๋ ์ฌ๊ทํจ์๋ฅผ ์จ๋ณธ ์ ์ด ์์ด์ ๊ทธ ๋ถ๋ถ์์ ํท๊ฐ๋ฆฌ๋ ๊ฒ ๊ฐ๋ค.
์ง์ง ์ค๋ช ์กฐ๊ธ๋ง ๋ ํด์ฃผ์ จ์ผ๋ฉด..ํํ..