정렬 알고리즘
1. Bubble Sort(거품 정렬)
2. Selection Sort(선택 정렬) ⇠
3. Insertion Sort(삽입 정렬)
4. Quick Sort(퀵 정렬)
5. Merge Sort(병합 정렬)
6. Heap Sort(힙 정렬)
7. Radix Sort(기수 정렬)
8. Counting Sort(계수 정렬)
public class Selection {
public static void sort(int[] arr) {
// 제일 마지막 순서(n)은 n-1번째가 정렬되는 순간 자동 정렬되므로 n-1까지만 탐색
for (int i = 0; i < arr.length-1; i++) {
int minIdx = i;
for (int j = i+1; j < arr.length; j++) {
if (arr[j] < arr[minIdx]) {
minIdx = j;
}
}
swap(arr, i, minIdx);
}
}
private static void swap(int[] arr, int a, int b) {
int tmp = arr[a];
arr[a] = arr[b];
arr[b] = tmp;
}
}
O(1)
의 시간복잡도를 가진다.O(N)
의 시간을 소모하며, 하나의 loop에서는 현재 인덱스의 값들과 비교하여 최소값을 찾은 후 현재 인덱스에 있는 값과 자리 교대(swap)을 해야하므로 O(N)
의 시간이 필요하게 된다. 따라서, 총 O(N^2)
의 시간 복잡도를 가진다.