Professional Documents
Culture Documents
10 Sort 2
10 Sort 2
내용
a. A 와 B에서 작은 값을 선택하여 C로 이동
• A 와 B에서 작은 값을 선택하여 C로 이동
• |A|=m, |B|=n 이면
– 값을 배열 C로 옮기는데 O(1)
– 총 정렬 시간은 O(n + m)
Merge Sort
• 정렬이 안된 배열
MergeSort(A[], m, n){
if (A[m : n]의 원소수 > 1) then {
divide A[m : n] into A[m : mid] and A[mid+1 : n];
MergeSort(A[], m, mid);
MergeSort(A[], mid+1, n);
Merge(A[], m, mid, n);
}
}
Merge Sort
list sorted[];
Merge(A[], left, mid, right){
i = left; j=mid+1; k=left
while(i<=mid && j<=right){
if(A[i]<=A[j])
sorted[k++]=A[i]; i++;
else
sorted[k++]=A[j]; j++;
}
if(i>mid) sorted[k...,right] ← A[j...right]
else sorted[k...,mid] ← A[i...mid]
A[left...right]<-sorted[left...right];
}
Merge Sort
[8, 3] [13, 6] [2, 14] [5] [9, 10] [1] [7, 12] [4]
[8] [3] [13] [6] [2] [14] [9] [10] [7] [12]
Merge Sort
[3, 8] [6, 13] [2, 14] [5] [9, 10] [1] [7, 12] [4]
[8] [3] [13] [6] [2] [14] [9] [10] [7] [12]
Merge sort
• t(n) : 크기 n의 배열의 merge sort에 소요되는 시간
– t(0) = t(1) = c, c : 상수
– n > 1이면
• n = 2k 이라 가정하면
QuickSort(A[], m, p-1);
}
Quick Sort
the first element the first element
greater than pivot smaller than pivot
0 1 n-1
X : pivot swap
new pivot X’ X
X’ X
·
·
·
sorted X
Quick Sort
void QuickSort(int list[], int left, int right) {
int pivot, i, j;
int temp;
if (left < right) {
i = left; j = right + 1;
pivot = list[left];
do {
do{
i++;
} while (list[i] < pivot);
do {
j--;
} while (list[j] > pivot);
if (i < j)
SWAP(list[i], list[j], temp);
} while (i < j);
Quick Sort
a[]= (26,5,37,1,61,11,59,15,48,19)
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
Quick Sort
• T(n): average time to sort N elements
≤ c· N + 2(c· N /2 + 2·T(N/4))
···
≤ c· N ·log N + N ·T(1)
2
= O(N ·log N)
• 방법
– 배열을 이진 정렬 트리에 삽입
• 동일한 키값의 원소 허용
– 시간 복잡도 : O(nlogn)
Binary Search Tree
if( T == NULL ) {
SearchTree T;
T = malloc( sizeof( struct BTreeNode ) );
if( T == NULL )
// make T empty
else {
T = MakeEmpty( NULL );
T->Element = X;
return T;
}
Binary Search Tree
A[] = {50, 17, 66, 19, 5, 60, 92, 80, 1, 13 }
50
17 66
60 92
5 19
1 13 80
Binary Search Tree
50,17,66,19,5,60,92,80,1,13 50
50,17,66,19,5,60,92,80,1,13 50
17
50
50,17,66,19,5,60,92,80,1,13
17 66
50
50,17,66,19,5,60,92,80,1,13 17 66
19
Binary Search Tree
50
50,17,66,19,5,60,92,80,1,13
17 66
5 19
50
50,17,66,19,5,60,92,80,1,13 17 66
5 19 60
Binary Search Tree
50
50,17,66,19,5,60,92,80,1,13
17 66
5 19 60 92
50
17 66
50,17,66,19,5,60,92,80,1,13 5 19 60 92
80
Binary Search Tree
50
50,17,66,19,5,60,92,80,1,13
17 66
5 19 60 92
1
50 80
50,17,66,19,5,60,92,80,1,13
17 66
5 19 60 92
1 13
80
Binary Search Tree
• Tree construction
• Sorting algorithm
– Quick sort
– Merge sort