-
선택 정렬(Selection Sort)자료구조와 알고리즘/기초 2020. 9. 13. 15:02
개념
주어진 값들 중 최솟값을 선택해서 배열의 맨 앞의 값과 교환한다. 그리고 맨 앞을 제외한 나머지 중에서 최솟값을 선택하고 교환하는 과정을 반복한다.
예제
{5, 4, 3, 2, 1} 로 이루어진 배열을 오름차순으로 선택 정렬하는 순서이다.
파란색 화살표는 주어진 범위에서 최소값이 위치할 공간을 가리키며, 빨간색 화살표는 최솟값을 가리킨다.
두 화살표가 가리키는 공간에 있는 값끼리 교환(swap)이 일어난다.
코드
class Sort { public static void selctionSort(int[] arr) { int min; int idx = 0; for (int i = 0; i < arr.length; i++) { min = Integer.MAX_VALUE; for (int j = i; j < arr.length; j++) { if (min > arr[j]) { min = arr[j]; idx = j; } } swap(i, idx, arr); } } public static void swap(int idx1, int idx2, int[] arr) { int temp = arr[idx1]; arr[idx1] = arr[idx2]; arr[idx2] = temp; } }
시간복잡도
5개의 숫자를 정렬하기 위해서 10번의 연산이 필요하다.
5 + 4 + 3 + 2 + 1
5 * ( 5 - 1 ) / 2 = 10
이를 일반식으로 표현하면
N + (N - 1) + (N -2) + ... + 3 + 2 + 1
N * (N - 1) / 2
빅오표기법은 최고차항만을 표기하고 상수항은 무시하므로,
선택 정렬의 시간복잡도는 O(N^2) 이다.
'자료구조와 알고리즘 > 기초' 카테고리의 다른 글
퀵 정렬(Quick Sort) (0) 2020.09.19 삽입 정렬(Insertion Sort) (0) 2020.09.16 버블 정렬(Bubble Sort) (0) 2020.09.14