/* 对右半段排序 */
20
• Example
3, 8, 2, 9, 6, 4, 1, 7, 5
3, 4, 1, 2, 5, 8, 9, 6, 7
1, 2, 4, 3, 5, 6, 7, 9, 8 1, 2, 3, 4, 5, 6, 7, 8, 9
1, 2, 3, 4, 5, 6, 7, 8, 9
19
基于上述思想,可实现快速排序算法如下:
template <class Type> void QuickSort (Type a[ ], int p, int r)
{ if (p<r)
/* 至少有两个元素 */
{int q=Partition(a,p,r); QuickSort(a, p, q-1); /*对左半段排序 */ QuickSort(a, q+1, r); } }
9
4
8
6
2
1
3
7
Divide
9 4 8 6 2 1 3 7
Merge-Sort
4 6 8 9
Merge-Sort
1 2 3 7
Combine
1 2 3 4 6 7 8 9
15
合并排序算法可递归地描述如下:
Template <class Type> void MergeSort (Type a[ ], int left, int right) { if (left<right)
求解子问题
29
求解子问题
32
合并子问题
32
5
(2)算法时间复杂性分析
Divide阶段所花时间: Conquer阶段所花时间: Combine阶段所花时间: