Sort 정리
Bubble Sort
stable sort
매번 연속된 두개의 인덱스를 비교하여 정한 기준의 값을 뒤로 넘겨 정렬하는 방법. 오름차순일 경우 비교시 큰값이 뒤로 이동.
시간복잡도 O(n^2)
Selection Sort
시간복잡도 O(n^2)
unstable sort
Insertion Sort
stable sort
기본 아이디어 : 현재 위치에서, 그 이하의 배열드을 비교하여 자신이 들어갈 위치를찾아, 그 위치에 삽입하는 배열 알고리즘 이다.
시간복잡도 : O(n^2)
Heap Sort
unstable sort
min heap, max heap을 구성해 정렬하는 방법. 내림차순 정렬을 위해서는 max heap을 이용하고 오름차순 정렬을 위해서는 min heap을 이용하면 된다.
Merge Sort
stable sort
Quick Sort
unstable sort
quick sort는 다음의 단계들로 이루어진다.
분할(Divide) : 입력 배열을 피벗을 기준으로 비균등하게 2개의 부분 배열(피벗을 중심으로 왼쪽: 피벗보다 작은 요소들, 오른쪽 : 피벗보다 큰 요소들)로 분할한다.
정복(Conquer) 부분 배열을 정렬한다. 부분 배열의 크기가 충분히 작지 않으면 순환 호출을 이용하여 다시 분할 정복 방법을 적용한다.
결합(Combine) : 정렬된 부분 배열들을 하나의 배열에 합병한다.
순환 호출이 한번 진행될 때 마다 최소한 하나의 원소(피벗)는 최종적으로 위치가 정해지므로 이 알고리즘은 반드시 끝난다는 것을 보장할 수 있다.
특징
장점
속도가 빠르다
시간복잡도 O(nlogn)
추가 메모리 공간을 필요로 하지 않는다.
퀵 소트는 O(logn)만큼의 메모리를 필요로 한다.
단점
정렬된 리스트에 대해서는 퀵 정렬의 불균형 분할에 의해 오히려 수행시간이 더 많이 걸린다.
해결법 : 퀵정렬의 불균형 분할을 방지하기 위해 피벗을 선택할 대 더욱 리스트를 균등하게 분할할 수 있는 데이터를 선택한다.
Last updated
Was this helpful?