Last active
October 5, 2019 17:44
-
-
Save Curookie/36f0007f67769c26ee173ed026e842a7 to your computer and use it in GitHub Desktop.
정렬 (Sort)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
정렬은 안정 정렬 ( 버블 정렬, 삽입 정렬, 병렬 정렬 )과 불안정 정렬 ( 선택 정렬, 퀵 정렬 )이 있다. | |
단순(구현 간단)하지만 비효율적인 방법 | |
삽입 정렬, 선택 정렬, 버블 정렬 | |
복잡하지만 효율적인 방법 | |
퀵 정렬, 힙 정렬, 합병 정렬, 기수 정렬 | |
삽입 정렬 (Insertion Sort) | |
손안의 카드를 정렬하는 방법과 유사하다. | |
- 새로운 카드를 기존의 정렬된 카드 사이의 올바른 자리를 찾아 삽입한다. | |
- 새로 삽입될 카드의 수만큼 반복하게 되면 전체 카드가 정렬된다. | |
자료 배열의 모든 요소를 앞에서부터 차례대로 이미 정렬된 배열 부분과 비교 하여, 자신의 위치를 찾아 삽입함으로써 정렬을 완성하는 알고리즘 | |
매 순서마다 해당 원소를 삽입할 수 있는 위치를 찾아 해당 위치에 넣는다. | |
선택 정렬 (Selection Sort) | |
1. 주어진 배열 중에서 최솟값을 찾는다. | |
2. 그 값을 맨 앞에 위치한 값과 교체한다(패스(pass)). | |
3. 맨 처음 위치를 뺀 나머지 리스트를 같은 방법으로 교체한다. | |
4. 하나의 원소만 남을 때까지 위의 1~3 과정을 반복한다. | |
퀵 정렬(Quick Sort) | |
퀵 정렬은 불안정 정렬 | |
분할 정복(divide and conquer) 방법 | |
1. 리스트 안에 있는 한 요소를 선택한다. 이렇게 고른 원소를 피벗(pivot) 이라고 한다. | |
2. 피벗을 기준으로 피벗보다 작은 요소들은 모두 피벗의 왼쪽으로 옮겨지고 피벗보다 큰 요소들은 모두 피벗의 오른쪽으로 옮겨진다. (피벗을 중심으로 왼쪽: 피벗보다 작은 요소들, 오른쪽: 피벗보다 큰 요소들) | |
3. 피벗을 제외한 왼쪽 리스트와 오른쪽 리스트를 다시 정렬한다. | |
- 분할된 부분 리스트에 대하여 순환 호출 을 이용하여 정렬을 반복한다. | |
- 부분 리스트에서도 다시 피벗을 정하고 피벗을 기준으로 2개의 부분 리스트로 나누는 과정을 반복한다. | |
4. 부분 리스트들이 더 이상 분할이 불가능할 때까지 반복한다. | |
- 리스트의 크기가 0이나 1이 될 때까지 반복한다. |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment