원시 정렬 알고리즘
선택정렬 : Θ(n*n)
버블정렬 : 최악 Θ(n*n) 최상 Θ(n)
삽입정렬 : Θ(n*n)
선택정렬 알고리즘 :
123456 -> 이건 인덱스
936405 : 가장큰수 9를 찾는다 n
536409 : 맨 뒤에 숫자와 바꾼다 1
가장큰수 6를 찾는다 n-1
530469 : n-1번째 숫자와 바꾼다.
n+(n-1)+(n-2) ... +1 의 시간이 걸림
= n(n+1)/2 이므로 Θ(n*n) 이다.
버블정렬 알고리즘 :
956405 : 맨앞부터 두개씩 비교해나간다. 01 12 23 34...
596405 : 순서대로 되어있지 않으면 바꾼다 ...............상수
569405
564905
564095
564059 : 요까지 n-1 , 1바퀴
반복한다
n-1 + n-2 + n-3 + ... + 1 = n(n-1)/2 = Θ(n*n)
하지만 맨앞부터 두자리씩 비교하내가다가 결국 m바퀴 째에서 우연히 순서가 잘못되어 있는 것이 없다면
그 시점에서 정렬은 종료된다. 운이좋다면 처음부터 정렬되어 있는 배열일수도 있고 이때 시간은 Θ(n)이다,
최악의 경우(역순으로 정렬되어있을경우)에 Θ(n*n)의 시간이 걸린다.
삽입정렬 알고리즘 :
앞에서부터 적당한 위치를 찾아 정리한다.
956405 ... 9를 어디에 넣을것인가? .... 1
596405 ... 5를 어디에 넣을것인가?
569405 ... 6을 어디에 넣을것인가?
456905 ... 4을 어디에 넣을것인가? .... n-3
045695 ... 0을 어디에 넣을것인가? .... n-2
045569 ... 5를 어디에 넣을것인가? .... n-1
n-1 + n-2 + n-3 + ... + 1 = n(n-1)/2 = Θ(n*n)
고급정렬 알고리즘
병합정렬 Θ(n log n)
퀵정렬 평균 Θ(n*n) , O(n*n)
힙정렬 Θ(n log n)
병합정렬
9 23 96 3 2 7 49 33 12
(mergeSort1)
9 23 96 3 2 7 49 33 12
(mS2) (mS7)
9 23 96 3 2 7 49 33 12
(mS3) (mS5) (mS8) (mS10)
9 23 96 3 2 7 49 33 12
(mS11)
33 12
(merge12)
12 33
(merge4) (merge6) (merge9) (merge13)
9 23 3 96 2 7 12 33 49
(merge3) (merge14)
3 9 23 96 2 7 12 33 49
(merge15)
2 3 7 9 12 23 33 49
퀵정렬
9 23 96 3 2 7 49 33 12
9 23 96 3 2 7 49 33 12 맨 뒤에 숫자를 기준으로
9 3 2 7 12 23 96 49 33 작은 숫자는 왼쪽, 큰숫자는 오른쪽에 배치
9 3 2 7 12 23 96 49 33 왼쪽, 오른쪽 각각 독립적으로 위의 과정을 반복
3 2 7 9 12 23 33 96 49
3 2 7 9 12 23 33 96 49
2 3 7 9 12 23 33 49 96 이렇게
힙정렬
'~ 2014 > 자료구조 & 알고리즘' 카테고리의 다른 글
hash table, hash map, tree map (0) | 2014.06.27 |
---|---|
[알고리즘] B트리, B+트리 (1) | 2014.06.15 |
[알고리즘] 이진탐색트리 (0) | 2014.06.15 |
[자료구조] 배열과 링크드 리스트 (0) | 2014.06.15 |