Sort
์ ๋ ฌ(Sorting) ์ ๋ฐ์ดํฐ๋ฅผ ํน์ ๊ธฐ์ค์ ๋ฐ๋ผ ์์๋๋ก ๋ฐฐ์ดํ๋ ์์ ์ผ๋ก, ๋ง์ ์๊ณ ๋ฆฌ์ฆ ๋ฌธ์ ๋ ์ค์ ๊ฐ๋ฐ์์ ์์ฃผ ๋ฑ์ฅํจ. Java ์์๋ ๋ค์ํ ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ์ ์ง์ ๊ตฌํํ๊ฑฐ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ํตํด ์ฌ์ฉํ ์ ์์.
๊ธฐ๋ณธ ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ(๋ฒ๋ธ, ์ ํ, ์ฝ์ ) ๋ถํฐ ๊ณ ๊ธ ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ(ํต, ๋ณํฉ, ํ) ๊น์ง ๊ฐ ์๊ณ ๋ฆฌ์ฆ์ ๊ฐ๋ , ์๊ฐ ๋ณต์ก๋, Java ์ฝ๋ ์์ ๋ฅผ ์ ๋ฆฌํ๊ณ ์ฑ๋ฅ์ ๋น๊ตํด๋ณด๊ฒ ์.
๊ธฐ๋ณธ ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ
1. ๋ฒ๋ธ ์ ๋ ฌ(Bubble Sort)
๊ฐ๋ : ์ธ์ ํ ๋ ๊ฐ์ ๋น๊ตํด์ ์๋ชป๋ ์์๋ผ๋ฉด ๊ตํ. ํ ๋ฐํด๋ง๋ค ๊ฐ์ฅ ํฐ ์๊ฐ ๋ค๋ก ์ด๋ํจ.
์๊ฐ ๋ณต์ก๋ :
์ต์ :
ํ๊ท /์ต์ :
๊ณต๊ฐ ๋ณต์ก๋ :
ํน์ง : ๋จ์ํ๊ณ ์์ ์ ๋ ฌ์ด์ง๋ง ์ฑ๋ฅ์ด ๊ฐ์ฅ ๋จ์ด์ง.
public static void bubbleSort(int[] arr) {
for(int i = 0; i < arr.length - 1; i++) {
boolean swapped = false;
for(int j = 0; j < arr.length - i - 1; j++) {
if(arr[j] > arr[j + 1]) {
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
swapped = true;
}
}
if (!swapped) break;
}
}
2. ์ ํ ์ ๋ ฌ(Selection Sort)
๊ฐ๋ : ๋จ์ ๋ถ๋ถ ์ค ๊ฐ์ฅ ์์ ๊ฐ์ ๊ณจ๋ผ ์์ชฝ๊ณผ ๊ตํ
์๊ฐ ๋ณต์ก๋ : ํญ์
๊ณต๊ฐ ๋ณต์ก๋ :
ํน์ง : ๊ตํ ํ์๊ฐ ์ ์ง๋ง ๋ถ์์ ์ ๋ ฌ.
public static void selectionSort(int[] arr) {
for(int i = 0; i < arr.length - 1; i++) {
int minIndex = i;
for(int j = i + 1; j < arr.length; j++) {
if(arr[j] < arr[minIndex]) {
minIndex = j;
}
}
int temp = arr[i];
arr[i] = arr[minIndex];
arr[minIndex] = temp;
}
}
3. ์ฝ์
์ ๋ ฌ(Insertion Sort)
๊ฐ๋ : ์์์๋ถํฐ ์ ๋ ฌ๋ ๋ถ๋ถ์ ์ ๊ฐ์ ์๋ง์ ์์น์ ์ฝ์ .
์๊ฐ ๋ณต์ก๋ :
์ต์ : (์ด๋ฏธ ์ ๋ ฌ๋ ๊ฒฝ์ฐ)
ํ๊ท / ์ต์ :
๊ณต๊ฐ ๋ณต์ก๋ :
ํน์ง : ๊ฑฐ์ ์ ๋ ฌ๋ ๋ฐฐ์ด์์ ๋น ๋ฆ. ์์ ์ ๋ ฌ.
public static void insertSort(int[] arr) {
for(int i = 1; i < arr.length; i++) {
int key = arr[i];
int j = i - 1;
while(j >= 0 && arr[j] > key) {
arr[j + 1] = arr[j];
j--;
}
arr[j + 1] = key;
}
}
๊ณ ๊ธ ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ
4. ํต ์ ๋ ฌ(Quick Sort)
๊ฐ๋ : ๊ธฐ์ค(pivot) ์ ์ ํด ์ข์ฐ๋ก ๋ถํ ํ๊ณ ์ฌ๊ท์ ์ผ๋ก ์ ๋ ฌ
์๊ฐ ๋ณต์ก๋ :
ํ๊ท :
์ต์ :
๊ณต๊ฐ ๋ณต์ก๋ : (์ฌ๊ท ์คํ)
ํน์ง : ๋งค์ฐ ๋น ๋ฅด๋ฉฐ ๊ฐ์ฅ ๋๋ฆฌ ์ฌ์ฉ๋จ. ๋ถ์์ ์ ๋ ฌ
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;
}
5. ๋ณํฉ ์ ๋ ฌ(Merge Sort)
๊ฐ๋ : ๋ฐฐ์ด์ ๋ฐ์ผ๋ก ๋๋๊ณ ์ ๋ ฌ ํ ๋ณํฉ
์๊ฐ ๋ณต์ก๋ : ํญ์
๊ณต๊ฐ ๋ณต์ก๋ : (์ถ๊ฐ ๋ฐฐ์ด ํ์)
ํน์ง : ์์ ์ ๋ ฌ, ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ง์ด ์ฌ์ฉํ์ง๋ง ์ฑ๋ฅ ์ผ์ .
public static void mergeSort(int[] arr, int left, int right) {
if(left < right) {
int mid = (left + right) / 2;
mergeSort(arr, left, mid);
mergeSort(arr, mid + 1, right);
merge(arr, left, mid, right);
}
}
private static void merge(int[] arr, int left, int mid, int right) {
int n1 = mid -left + 1;
int n2 = right - mid;
int[] L = new int[n1];
int[] R = new int[n2];
for(int i = 0; i < n1; ++i) L[i] = arr[left - i];
for(int j = 0; j < n2; ++j) R[j] = arr[mid + 1 + j];
int i = 0, j = 0, k = left;
while(i < n1 && j < n2) {
arr[k++] = (L[i] <= R[j]) ? L[i++] : R[j++];
}
while (i < n1) arr[k++] = L[i++];
while (j < n2) arr[k++] = R[j++];
}
6. ํ ์ ๋ ฌ(Heap Sort)
๊ฐ๋ : ์ต๋ ํ์ ๊ตฌ์ฑ ํ ๋ฃจํธ์ ๊ตํํ๋ฉฐ ์ ๋ ฌ
์๊ฐ ๋ณต์ก๋ : ํญ์
๊ณต๊ฐ ๋ณต์ก๋ :
ํน์ง : ๋ถ์์ ์ ๋ ฌ, ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ ์ ๊ณ ์ต์ ์ ๊ฒฝ์ฐ์๋ ์์ ๋ ์ฑ๋ฅ.
public static void heapSort(int[] arr) {
int n = arr.length;
for(int i = n /2 - 1; i >= 0; i--) heapify(arr, n, i);
for(int i = n - 1; i > 0; i--) {
int temp = arr[0];
arr[0] = arr[i];
arr[i] = temp;
heapify(arr, i , 0);
}
}
private static void heapify(int[] arr, int n, int i) {
int largest = i;
int left = 2 * i + 1;
int right = 2 * i + 2;
if(left < n && arr[left] > arr[largest]) largest = left;
if(right < n && arr[right] > arr[largest]) largest = right;
if(largest != i) {
int temp = arr[i];
arr[i] = arr[largest];
arr[largest] = temp;
heapigfy(arr, n, largest);
}
}
์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ ์ฑ๋ฅ ๋น๊ตํ
์๊ณ ๋ฆฌ์ฆ
์ต์
ํ๊ท
์ต์
๊ณต๊ฐ๋ณต์ก๋
์์ ์ฑ
๋ฒ๋ธ ์ ๋ ฌ
O(n)
O(n^2)
O(n^2)
O(1)
์์
์ ํ ์ ๋ ฌ
O(n^2)
O(n^2)
O(n^2)
O(1)
๋ถ์์
์ฝ์ ์ ๋ ฌ
O(n)
O(n^2)
O(n^2)
O(1)
์์
ํต ์ ๋ ฌ
O(n log n)
O(n log n)
O(n^2)
O(log n)
๋ถ์์
๋ณํฉ ์ ๋ ฌ
O(n log n)
O(n log n)
O(n log n)
O(n)
์์
ํ ์ ๋ ฌ
O(n log n)
O(n log n)
O(n log n)
O(1)
๋ถ์์
์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ ์ ํ ํ
์ ๋ ฅ์ด ๊ฑฐ์ ์ ๋ ฌ๋ ๊ฒฝ์ฐ: ์ฝ์ ์ ๋ ฌ
์ผ๋ฐ์ ์ธ ๋์ฉ๋ ๋ฐ์ดํฐ: ํต ์ ๋ ฌ
์ต์ ์ ๊ฒฝ์ฐ ์ฑ๋ฅ ๋ณด์ฅ: ๋ณํฉ ์ ๋ ฌ, ํ ์ ๋ ฌ
์์ ์ฑ์ด ํ์ํ ๊ฒฝ์ฐ: ๋ณํฉ ์ ๋ ฌ
๋ฉ๋ชจ๋ฆฌ๊ฐ ์ ํ๋ ํ๊ฒฝ: ํ ์ ๋ ฌ
Last updated
Was this helpful?