您的位置:首页 > 编程语言

《算法导论》第七章----快速排序(代码实现+部分练习+部分证明)

2013-09-28 18:21 501 查看
《算法导论》学习记录目录

快速排序,对于n个数的输入数组,最坏情况运行时间:Θ(n^2);期望运行时间:Θ(nlgn);就地排序(Sort in place)。

数组A[p..r]会被分为两个子数组A[p..q-1]和A[q+1..r],其中A[p..q-1]的元素都不大于A[q],A[q+1..r]都不小于A[q]。

如何划分子数组对运行时间的有很大影响,最坏的情况为n个数的数组划分为一个n-1的数组和一个0元素的数组;最佳情况为对半分(1:1);对于平均情况的划分,其运行时间与最佳情况很接近。

先看代码实现:

快速排序的关键是数组划分,对子数组进行就地重排。

int hoare_partition(int A[], int p, int r){
int x = A[p];
int i = p;
int j = r;

while(i < j){
while(i < j && A[j] > x)
j--;
A[i] = A[j];
while(i < j && A[i] < x)
i++;
A[j] = A[i];
}
A[i] = x;
return j;
}

void hoare_quick_sort(int A[], int p, int r){
if(p < r){
int q = hoare_partition(A, p, r);
hoare_quick_sort(A, p, q-1);
hoare_quick_sort(A, q+1, r);
}
}


View Code

继续努力。。。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: