public class QuickSort {
public static void quickSort(int[] arr, int low, int high) {
if (low < high) {
int pi = partition(arr, low, high);
quickSort(arr, low, pi - 1);
quickSort(arr, pi + 1, high);
}
}
private static int partition(int[] arr, int low, int high) {
int pivot = arr[high];
int i = (low - 1);
for (int j = low; j < high; j++) {
if (arr[j] <= pivot) {
i++;
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
int temp = arr[i + 1];
arr[i + 1] = arr[high];
arr[high] = temp;
return i + 1;
}
public static void main(String[] args) {
int[] arr = {64, 34, 25, 12, 22, 11, 90};
System.out.println("์ ๋ ฌ ์ ๋ฐฐ์ด:");
for (int num : arr) System.out.print(num + " ");
System.out.println();
quickSort(arr, 0, arr.length - 1);
System.out.println("์ ๋ ฌ ํ ๋ฐฐ์ด:");
for (int num : arr) System.out.print(num + " ");
System.out.println();
}
}
Java
๋ณต์ฌ
์๊ฐ๋ณต์ก๋ ๋ถ์
ํต์ ๋ ฌ์ ์๊ฐ๋ณต์ก๋๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
โข
์ต์ ์ ๊ฒฝ์ฐ: O(n log n) - ํผ๋ฒ์ด ํญ์ ์ค๊ฐ ๊ฐ์ผ๋ก ์ ํ๋๋ ๊ฒฝ์ฐ
โข
ํ๊ท ์ ๊ฒฝ์ฐ: O(n log n) - ์ผ๋ฐ์ ์ธ ์ํฉ์์์ ์ฑ๋ฅ
โข
์ต์
์ ๊ฒฝ์ฐ: O(nยฒ) - ์ด๋ฏธ ์ ๋ ฌ๋ ๋ฐฐ์ด์ด๋ ํผ๋ฒ์ด ํญ์ ์ต์/์ต๋๊ฐ์ธ ๊ฒฝ์ฐ
O(nยฒ) ์๊ฐ๋ณต์ก๋ ๋ถ์
์ต์
์ ๊ฒฝ์ฐ O(nยฒ)๊ฐ ๋๋ ๊ณผ์ ์ ๋ถ์ํด๋ณด๊ฒ ์ต๋๋ค:
1. ๋ถํ (Partition) ๊ณผ์
โข
๋งค ๋ถํ ๋ง๋ค ์ ์ฒด ๋ฐฐ์ด์ ์ํ: O(n)
โข
์ด๋ฏธ ์ ๋ ฌ๋ ๋ฐฐ์ด์์ ์ต์/์ต๋๊ฐ์ด ํผ๋ฒ์ผ๋ก ์ ํ๋ ๊ฒฝ์ฐ:
โฆ
ํ์ชฝ ํํฐ์
์ 0๊ฐ์ ์์
โฆ
๋ค๋ฅธ ์ชฝ ํํฐ์
์ n-1๊ฐ์ ์์๋ฅผ ๊ฐ์ง
2. ์ฌ๊ท ํธ์ถ ๊ณผ์
โข
๋ถ๊ท ํ ๋ถํ ๋ก ์ธํด n๋ฒ์ ์ฌ๊ท ํธ์ถ ๋ฐ์
โข
๊ฐ ๋ ๋ฒจ์์ n๊ฐ์ ์์๋ฅผ ์ฒ๋ฆฌ
์ต์ข ๊ฒฐ๋ก
๋ถํ ๊ณผ์ O(n) ร ์ฌ๊ท ํธ์ถ ํ์ O(n) = O(nยฒ)
์ด๋ ํผ๋ฒ ์ ํ์ด ์ต์
์ ๊ฒฝ์ฐ์ผ ๋(ํญ์ ์ต์๊ฐ์ด๋ ์ต๋๊ฐ์ด ์ ํ๋ ๋) ๋ฐ์ํ๋ฉฐ, ๋ถํ ์ด ๊ฐ์ฅ ๋ถ๊ท ํํ๊ฒ ์ด๋ฃจ์ด์ ธ ์ ์ฒด ์๊ณ ๋ฆฌ์ฆ์ ํจ์จ์ฑ์ด ์ ํ๋ฉ๋๋ค.
๊ณต๊ฐ๋ณต์ก๋
ํต์ ๋ ฌ์ ๊ณต๊ฐ๋ณต์ก๋๋ O(log n)์
๋๋ค. ์ด๋ ์ฌ๊ท ํธ์ถ ์คํ์ ํ์ํ ๊ณต๊ฐ์ ์๋ฏธํฉ๋๋ค.
ํน์ง
โข
๋ถ์์ ์ ๋ ฌ: ๋์ผํ ๊ฐ์ ๊ฐ์ง ์์๋ค์ ์๋์ ์์น๊ฐ ๋ณด์ฅ๋์ง ์์
โข
์ ์๋ฆฌ ์ ๋ ฌ: ์ถ๊ฐ์ ์ธ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ด ๊ฑฐ์ ํ์ํ์ง ์์
โข
๋ถํ ์ ๋ณต: ๋ฌธ์ ๋ฅผ ๋ ์์ ๋ถ๋ถ์ผ๋ก ๋๋์ด ํด๊ฒฐํ๋ ๋ฐฉ์
โข
์ค์ ์ฑ๋ฅ: ํ๊ท ์ ์ผ๋ก ๋ค๋ฅธ O(n log n) ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ๋ณด๋ค ๋น ๋ฅธ ์ฑ๋ฅ์ ๋ณด์
์ต์ ํ ๋ฐฉ๋ฒ
ํต์ ๋ ฌ์ ์ฑ๋ฅ์ ํฅ์์ํค๊ธฐ ์ํ ์ฌ๋ฌ ์ต์ ํ ๋ฐฉ๋ฒ์ด ์์ต๋๋ค:
โข
๋ฌด์์ ํผ๋ฒ ์ ํ: ์ต์
์ ๊ฒฝ์ฐ๋ฅผ ํผํ๊ธฐ ์ํด ํผ๋ฒ์ ๋๋คํ๊ฒ ์ ํ
โข
์ฝ์
์ ๋ ฌ ํผ์ฉ: ์์ ๋ถ๋ถ ๋ฐฐ์ด(๋ณดํต 10๊ฐ ์ดํ)์ ๋ํด์๋ ์ฝ์
์ ๋ ฌ ์ฌ์ฉ
โข
3-๋ฐฉํฅ ํต์ ๋ ฌ: ์ค๋ณต๋ ์์๊ฐ ๋ง์ ๊ฒฝ์ฐ์ ํจ์จ์ ์ธ ๋ฐฉ๋ฒ
โข
์ค๊ฐ๊ฐ ํผ๋ฒ: ์ฒซ ๋ฒ์งธ, ์ค๊ฐ, ๋ง์ง๋ง ์์ ์ค ์ค๊ฐ๊ฐ์ ํผ๋ฒ์ผ๋ก ์ ํ
๋ณํฉ์ ๋ ฌ๊ณผ์ ๋น๊ต
ํน์ฑ | ํต์ ๋ ฌ | ๋ณํฉ์ ๋ ฌ |
์ต์
์๊ฐ๋ณต์ก๋ | O(nยฒ) | O(n log n) |
ํ๊ท ์๊ฐ๋ณต์ก๋ | O(n log n) | O(n log n) |
๊ณต๊ฐ๋ณต์ก๋ | O(log n) | O(n) |
์์ ์ฑ | ๋ถ์์ | ์์ |
์ ์๋ฆฌ ์ ๋ ฌ | ์ | ์๋์ค |