《算法导论》第七章----快速排序(代码实现+部分练习+部分证明)
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);对于平均情况的划分,其运行时间与最佳情况很接近。
先看代码实现:
快速排序的关键是数组划分,对子数组进行就地重排。
View Code
继续努力。。。
快速排序,对于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
继续努力。。。
相关文章推荐
- 《算法导论》第六章----优先级队列(代码实现+部分练习)
- 《算法导论》第六章----优先级队列(代码实现+部分练习)
- 算法导论第七章-快速排序-Cpp代码实现
- 算法导论 第七章快速排序和两种swap函数实现方式比较
- 算法导论 第七章快速排序中两种swap函数实现方式比较
- 算法导论 第七章快速排序中两种swap函数实现方式比较
- 《算法导论》第七章-快速排序(伪代码)
- 算法导论 6章堆排序的代码实现和部分课后练习
- 优先级队列(代码实现+部分练习)
- 算法导论Java实现-快速排序(第七章)
- 算法导论-第七章-快速排序:随机化快速排序C++实现
- python学习第七章用户输入和While循环部分课后练习自己尝试的代码
- 拉格朗日插值法(代码实现及部分证明)
- 基本排序算法的实现(我的练习 快速排序有三种实现方式,值得关注)
- Android通用网络请求解析框架.3(代码实现,公共部分)
- 数据结构 关于树的几个证明题及代码实现
- 第四章计算器程序部分代码,结合练习
- 算法导论第二章课后习题代码实现
- 2_Hibernate_HelloWorld 代码实现部分
- 360视频质量评估标准:WS-PSNR及对应代码实现部分