Bubble sort (거품정렬)
- performance : O(n^2) - performance 안좋지..
- space complexity : O(1) - swapping을 위한 공간 1개 필요
- 인접한 두개의 자료를 비교해서 차순에 맞게 정렬하는 작업을 (자료개수-1) 번 만큼 반복한다.
- 뒤부터 채워준다.
[4, 3, 1, 2] [3, 4, 1, 2] [3, 1, 4, 2] -------------
[3, 1, 2, 4] [1, 3, 2, 4] [1, 2, 3, 4]-------------
[1, 2, 3, 4]
[1, 2, 3, 4]
[1, 2, 3, 4]
Selection Sort (선택정렬)
- Worst case performance : O(n^2)
- Best case performance : O(n^2)
- Average case performance : O(n^2)
- Worst case space complexity : O(n) total, O(1) auxiliary
- Minimum value라는 1개의 공간을 사용한다!!
- 처음부터 하나하나 Minimum value의 공간에 집어 넣고 뒤의 값들과 비교 하면서 Minimum value를 변경해 주고, 앞의 값과 Minimum value값을 교환해 주는 식으로 마지막까지 해준다.
- 앞부터 채워준다.
[6, 5, 2, 4, 3, 1, 0]
[0, 5, 2, 4, 3, 1, 6]
[0, 1, 2, 4, 3, 5, 6]
[0, 1, 2, 4, 3, 5, 6]
[0, 1, 2, 3, 4, 5, 6]
[0, 1, 2, 3, 4, 5, 6]
Insertion Sort (삽입정렬)
- 아주 간단하게 구현 할 수 있지만, 효율적이지 않음
[5, 4, 3, 0, 1, 2]
[4, 5, 3, 0, 1, 2]
[3, 4, 5, 0, 1, 2]
[0, 3, 4, 5, 1, 2]
[0, 1, 3, 4, 5, 2]
[0, 1, 2, 3, 4, 5]
Merge Sort (병합정렬)
- performance (n log n)
1. Divide the unsorted list into n sublists, each containing 1 element (a list of 1 element is considered sorted)
2. Repeatedly merge sublists to produce new sorted sublists until there is only 1 sublists remaining. This will be the sorted list.
[1,5,4,8,8,3,2,4] 이 있다면.
1. sublists의 구성이 1개가 될 때 까지 list를 쪼갠다.
[1],[5],[4],[8],[8],[3],[2],[4]
2. 각 element를 sort와 merge하는데, 하나의 list가 될 때까지 반복해 준다.
[1,5],[4,8],[3,8],[2,4]
[1,4,5,8],[2,3,4,8]
[1,2,3,4,4,5,8,8]
끝
split : [8, 7, 6, 5, 4, 3, 2, 1]
split : [8, 7, 6, 5]
split : [8, 7]
split : [8]
split : [7]
merge : [7, 8]
split : [6, 5]
split : [6]
split : [5]
merge : [5, 6]
merge : [5, 6, 7, 8]
split : [4, 3, 2, 1]
split : [4, 3]
split : [4]
split : [3]
merge : [3, 4]
split : [2, 1]
split : [2]
split : [1]
merge : [1, 2]
merge : [1, 2, 3, 4]
merge : [1, 2, 3, 4, 5, 6, 7, 8]
Quick Sort (퀵정렬)
- performance : O(n log n), worst case O(n^2)(이미 정렬되어 있는 경우)
- space complexity : O(n)
1. Finde Pivot, move items smaller than pivot to the left side of pivot, move items greater than pivot to the right side of pivot.
2. Repeatedly do step 1 from both left side items and right side items.
list : [1, 5, 8, 6, 2, 4, 2, 7, 8, 3]
pivot : 3
left : [1, 2, 2]
list : [1, 2, 2, 3, 5, 4, 8, 7, 8, 6]
pivot : 2
left : [1]
list : [1, 2, 2, 3, 5, 4, 8, 7, 8, 6]
right : [2]
list : [1, 2, 2, 3, 5, 4, 8, 7, 8, 6]
right : [5, 4, 8, 7, 8, 6]
list : [1, 2, 2, 3, 5, 4, 8, 7, 8, 6]
pivot : 6
left : [5, 4]
list : [1, 2, 2, 3, 5, 4, 6, 7, 8, 8]
pivot : 4
left : []
list : [1, 2, 2, 3, 4, 5, 6, 7, 8, 8]
right : [5]
list : [1, 2, 2, 3, 4, 5, 6, 7, 8, 8]
right : [7, 8, 8]
list : [1, 2, 2, 3, 4, 5, 6, 7, 8, 8]
pivot : 8
left : [7]
list : [1, 2, 2, 3, 4, 5, 6, 7, 8, 8]
right : [8]
list : [1, 2, 2, 3, 4, 5, 6, 7, 8, 8]
- pivot을 중앙값으로 잡고 하는 경우
list : [54, 26, 93, 17, 77, 31, 44, 55, 20]
pivot : 77
left : [54, 26, 17, 31, 44, 55, 20]
equal : [77]
right : [93]
list : [54, 26, 17, 31, 44, 55, 20]
pivot : 31
left : [26, 17, 20]
equal : [31]
right : [54, 44, 55]
list : [26, 17, 20]
pivot : 17
left : []
equal : [17]
right : [26, 20]
list : [26, 20]
pivot : 20
left : []
equal : [20]
right : [26]
list : [54, 44, 55]
pivot : 44
left : []
equal : [44]
right : [54, 55]
list : [54, 55]
pivot : 55
left : [54]
equal : [55]
right : []
Out:[17, 20, 26, 31, 44, 54, 55, 77, 93]
Source Code : The-G
reference
- 상상개발자
'Algorithm' 카테고리의 다른 글
자료구조 Linked_list (0) | 2017.10.03 |
---|---|
자료구조 Queue / Stack (0) | 2017.10.03 |
Big-O notation / Time Complexity / Space Complexity (0) | 2017.10.02 |
도화지를 차지하는 노트의 넓이 구하기 (0) | 2017.09.28 |
객체지향프로그래밍(OOP) 개념 (0) | 2017.09.27 |