4. quick sortelearning.kocw.net/kocw/document/2015/yeungnam/jeongbonggyo/… · 정렬 (page 13) 4....

13
7. 정렬 (Page 13) 4. Quick Sort 기본 개념 Sort algorithm average performance가장 좋음 단계마다 pivot key보다 작은 부분과 부분으로 전체 데이터를 분할 Program 7.6 & Example 7.3 SPLIT k m x k m x x Sort recursively by quicksort Sort recursively by quicksort x

Upload: others

Post on 14-Aug-2020

1 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 4. Quick Sortelearning.kocw.net/KOCW/document/2015/yeungnam/jeongbonggyo/… · 정렬 (Page 13) 4. Quick Sort . . 기본 개념. . Sort algorithm 중 average performance가 가장

7장. 정렬 (Page 13)

4. Quick Sort

기본 개념 Sort algorithm 중 average performance가 가장 좋음 각 단계마다 pivot key보다 작은 부분과 큰 부분으로 전체 데이터를 분할

Program 7.6 & Example 7.3

SPLIT

k

m

x k

m

x

≥ x

Sort recursively by quicksort

Sort recursively by quicksort

≤ x

Page 2: 4. Quick Sortelearning.kocw.net/KOCW/document/2015/yeungnam/jeongbonggyo/… · 정렬 (Page 13) 4. Quick Sort . . 기본 개념. . Sort algorithm 중 average performance가 가장

7장. 정렬 (Page 14)

Program 7.6(1): quicksort()

void quicksort (element list[ ], int left, int right)

// list[left], …, list[right]까지 오름차순으로 정렬. // list[left].key를 중추 키(pivot key)로 선정 // list[left].key ≤ list[right + 1].key 라고 가정 int pivot, i, j; element temp; if (left < right) i = left; j = right + 1; pivot = list[left].key;

Page 3: 4. Quick Sortelearning.kocw.net/KOCW/document/2015/yeungnam/jeongbonggyo/… · 정렬 (Page 13) 4. Quick Sort . . 기본 개념. . Sort algorithm 중 average performance가 가장

7장. 정렬 (Page 15)

Program 7.6(2): quicksort() do // pivot을 중심으로 왼쪽과 오른쪽 리스트 생성 // 왼쪽 리스트: pivot보다 적은 키들을 저장, 오른쪽은 반대 do // 왼쪽부터 pivot보다 큰 키를 검색 i++; while (list[i].key < pivot); do // 오른쪽부터 pivot보다 작은 키를 검색 j--; while (list[j].key > pivot); if ( i < j ) // 각 리스트의 속성을 만족하도록 데이터 교환 SWAP( list[i], list[j], temp ); while ( i < j ); SWAP( list[left], list[j], temp ); quicksort( list, left, j – 1 ); // 왼쪽 리스트를 다시 정렬 quicksort( list, j + 1, right ); // 오른쪽 리스트를 다시 정렬

Page 4: 4. Quick Sortelearning.kocw.net/KOCW/document/2015/yeungnam/jeongbonggyo/… · 정렬 (Page 13) 4. Quick Sort . . 기본 개념. . Sort algorithm 중 average performance가 가장

7장. 정렬 (Page 16)

그림 7.2: quicksort()의 동작 과정

R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 left right

[26 5 37 1 61 11 59 15 48 19] 0 9

[11 5 19 1 15] 26 [59 61 48 37] 0 4

[1 5] 11 [19 15] 26 [59 61 48 37] 0 1

1 5 11 [19 15] 26 [59 61 48 37] 3 4

1 5 11 15 19 26 [59 61 48 37] 6 9

1 5 11 15 19 26 [48 37] 59 [61] 6 7

1 5 11 15 19 26 37 48 59 [61] 9 9

1 5 11 15 19 26 37 48 59 61

Page 5: 4. Quick Sortelearning.kocw.net/KOCW/document/2015/yeungnam/jeongbonggyo/… · 정렬 (Page 13) 4. Quick Sort . . 기본 개념. . Sort algorithm 중 average performance가 가장

연습 문제 아래 보기의 자료를 Quick Sort 방법으로 1회전 수행 시 결과는 무엇인가? 단, pivot key는 첫 번째 데이터의 키 값으로 한다.

7장. 정렬 (Page 17)

원 데이터 57 28 98 35 66 33 90 87 77 21

1회전 수행

후 결과

Page 6: 4. Quick Sortelearning.kocw.net/KOCW/document/2015/yeungnam/jeongbonggyo/… · 정렬 (Page 13) 4. Quick Sort . . 기본 개념. . Sort algorithm 중 average performance가 가장

7장. 정렬 (Page 18)

Quick Sort의 성능 (1)

Worst case performance : O(n2) Average performance : O(n log2 n) ← Lemma 7.1

T(n) ≤ cn + 2T(n/2) ≤ cn + 2(cn/2 + 2T(n/4)) ≤ 2cn + 4T(n/4) . . . ≤ cn log2n+ nT(1)

변형

Pivot key 의 선정 : median(Kleft, K(left+right)/2, Kright)

Page 7: 4. Quick Sortelearning.kocw.net/KOCW/document/2015/yeungnam/jeongbonggyo/… · 정렬 (Page 13) 4. Quick Sort . . 기본 개념. . Sort algorithm 중 average performance가 가장

Quick Sort의 성능 (2) 정렬되지 않은 경우 (pivot = left key)

7장. 정렬 (Page 19)

Page 8: 4. Quick Sortelearning.kocw.net/KOCW/document/2015/yeungnam/jeongbonggyo/… · 정렬 (Page 13) 4. Quick Sort . . 기본 개념. . Sort algorithm 중 average performance가 가장

Quick Sort의 성능 (3) 입력 데이터가 오름차순으로 정렬된 경우 (pivot = left key)

7장. 정렬 (Page 20)

Page 9: 4. Quick Sortelearning.kocw.net/KOCW/document/2015/yeungnam/jeongbonggyo/… · 정렬 (Page 13) 4. Quick Sort . . 기본 개념. . Sort algorithm 중 average performance가 가장

Quick Sort의 성능 (4) 입력 데이터가 오름차순으로 정렬된 경우 (pivot = median)

7장. 정렬 (Page 21)

Page 10: 4. Quick Sortelearning.kocw.net/KOCW/document/2015/yeungnam/jeongbonggyo/… · 정렬 (Page 13) 4. Quick Sort . . 기본 개념. . Sort algorithm 중 average performance가 가장

Quick Sort의 성능 (5) 입력 데이터가 내림차순으로 정렬된 경우 (pivot = median)

7장. 정렬 (Page 22)

Page 11: 4. Quick Sortelearning.kocw.net/KOCW/document/2015/yeungnam/jeongbonggyo/… · 정렬 (Page 13) 4. Quick Sort . . 기본 개념. . Sort algorithm 중 average performance가 가장

7장. 정렬 (Page 23)

5. 최적의 Sorting 시간 n개의 원소를 갖는 리스트를 이론적으로 얼마나 빨리 정렬할 수 있을까?

Sort by comparison의 경우 Decision tree 이용 (Figure 7.3 ~ 7.4)

정리 7.1

n개의 서로 다른 원소들을 정렬하는 decision tree는 적어도 log2(n!) + 1의 높이를 갖는다.

추론 단지 비교만으로 정렬하는 알고리즘은 최악의 경우 Ω(n log2n) 연산 시간을 갖는다.

log2n ! ≥ (n/2)log2(n/2) = Ω(n log2n)

Page 12: 4. Quick Sortelearning.kocw.net/KOCW/document/2015/yeungnam/jeongbonggyo/… · 정렬 (Page 13) 4. Quick Sort . . 기본 개념. . Sort algorithm 중 average performance가 가장

7장. 정렬 (Page 24)

그림 7.2: 삽입 정렬에 대한 decision tree

K0≤ K1

K1 ≤ K2 K0 ≤ K2

STOP K0 ≤ K2 STOP K1 ≤ K2

STOP STOP STOP STOP

[0, 1, 2]

[0, 1, 2]

[0, 2, 1]

[0, 2, 1] [2, 0, 1] [1, 2, 0] [2, 1, 0]

[1, 2, 0]

[1, 0, 2]

[1, 0, 2]

Yes No

Yes

Yes

Yes

Yes

No

No

No

No

II

I

III

IV

VI V

[0, 1, 2]

Page 13: 4. Quick Sortelearning.kocw.net/KOCW/document/2015/yeungnam/jeongbonggyo/… · 정렬 (Page 13) 4. Quick Sort . . 기본 개념. . Sort algorithm 중 average performance가 가장

7장. 정렬 (Page 25)

그림 7.3: 7, 9, 10의 여섯 가지 순열

Leaf 순열 순열을 제공하는 7, 9, 10의 키 값

I 0 1 2 ( 7, 9, 10 )

II 0 2 1 ( 7, 10, 9 )

III 2 0 1 ( 9, 10, 7 )

IV 1 0 2 ( 9, 7, 10 )

V 1 2 0 ( 10, 7, 9 )

VI 2 1 0 ( 10, 9, 7 )