🤔 정렬 알고리즘
n개의 숫자가 입력으로 주어졌을 때, 이를 사용자가 지정한 기준에 맞게 정렬하여 출력하는 알고리즘. 종류가 굉장히 다양한데, 이에 따라 수행시간 역시 천차만별.
현재 위치에 들어갈 값을 찾아 바꾸어 정렬하는 알고리즘. 현재 위치에 저장될 값의 크기에 따라 최소 선택 정렬(Min-Selection Sort), 최대 선택 정렬(Max-Selection Sort)로 구분할 수 있다.
최소 선택 정렬은 오름 차순, 최대 선택 정렬은 내림차순으로 정렬된다.
일반적인 케이스
최악의 경우(역순서)
void selectionSort(int[] arr) {
int indexMin, temp;
for (int i = 0; i < arr.length-1; i++) { // 1. index 선택
indexMin = i;
for (int j = i + 1; j < arr.length; j++) { // 2. i+1번째 원소부터 index의 값과 비교
if (arr[j] < arr[indexMin]) { // 3. 현재 선택한 자리에 있는 값보다 순회하고 있는 값이 작다면 index를 갱신
indexMin = j;
}
}
// 4. swap(arr[indexMin], arr[i])
temp = arr[indexMin];
arr[indexMin] = arr[i];
arr[i] = temp;
}
System.out.println(Arrays.toString(arr));
}
공간복잡도는 O(1)
이다.(n-1) + (n-2) + .... + 2 + 1 => n(n-1)/2
시간복잡도는 O(n²)
이다.버블 정렬
선택 정렬
O(n²)
이니 쓰지 말라고 하네요(ㅎ)버블 정렬(Bubble Sort)이나 삽입 정렬(Insertion Sort)과 유사해 헷갈리기 쉽다고 하는데,
선택 정렬은 해당 순서에 원소를 넣을 위치가 이미 정해져 있고, 어떤 원소를 넣을지 순차적으로 탐색하면서 선택하는 알고리즘
임을 기억하면 됩니다!