《算法导论:快速排序》:这种很优秀,代码简单,效率高,并且划分标准.
2010-06-30 13:23
330 查看
#include <stdio.h> int partition(int *A,int p,int r) { int x=A[r]; int i=p-1; for(int j=p;j<=r-1;j++) { if(A[j]<=x) { i=i+1; int t=A[i]; A[i]=A[j]; A[j]=t; } } A[r]=A[i+1]; A[i+1]=x; return i+1; } void quickSort(int *A,int p,int r) { if(p<r) { int q=partition(A,p,r); quickSort(A,p,q-1); quickSort(A,q+1,r); } } int main() { int input[10]={7,6,5,4,1,1,22,45,11,12}; quickSort(input,0,9); for(int i=0;i<10;++i) { printf("%d ",input[i]); } return 0; }
这个快速排序,维护了四段区间,一个是p...i 这一段区间, 它们均小于等于A[r] ,一段是i+1...j-1, 这一段均大于A[r], 还有一段是未分类的元素,范围是j.....r-1,最终是r, A[r]是划分关键字.
0(n)时间可以完成划分,循环结束后,将关键字与第一个大于A[r]的元素互换,这样就满足p...i+1均小于等于A[r],i+2....r均大于A[r].
这种实现方法代码间断,不易出错,而且partition()可以单独用于数组的划分,左边的元素一定是小于等于关键字的,右边的元素一定是大于关键字的, 对于找第K大元素等算法思想是强大支持.
相关文章推荐
- 快速排序简单代码
- C++ 17 标准正式发布:终于能更简单地编写和维护代码了!
- C++ 17标准正式发布! 更简单地编写和维护代码
- 编写存储过程,并且使用java代码调用存储过程的简单例子
- Swift中10个简单易用的单行代码,提高效率,晋升逼格
- iOS开发之优秀开源框架IQKeyboardManager,零行代码解决键盘遮挡问题,如此简单解决键盘遮挡问题,IQKeyboardManager源码分解
- 收了100元辛苦费,写了一个最简单的C#ASP.NET的3层架构例子代码,源码是通过代码生成器生成的【写程序的效率神奇的高】
- 算法导论第三版快速排序(三数取中划分)Median-of-3 partition
- 八、百钱百鸡的问题(5种方式解决-代码执行效率由复杂到简单)
- 一个简单的Tab平滑切换特效jquery代码,没有做最大效率优化
- 简单的快速排序,将数组排序然后从小到大输出不重复的数。(渣代码,写得丑)
- C++ 17 标准正式发布:终于能更简单地编写和维护代码了!
- java 60 行代码写一个简单可用的并且带过期时间的内存缓存
- iOS 快速创建常用UI,使代码更加整洁并且提高开发效率<1>
- 快速排序中的partition函数的枢纽元选择,代码细节,以及其标准实现
- 《算法导论》第七章----快速排序(代码实现+部分练习+部分证明)
- 冒泡、选择、插入、归并、希尔、快速排序效率比较代码
- 问题1:java中没有实现这种“byte a = 0xB2 --> String b = “B2””转换的简单实现需要自己实现。 答:自己编写的转换函数,思路将byte的高低4位分开,分别转换为对应的字符然后合成返回的字符串。 java 代码 1.
- C++ 17 标准正式发布:终于能更简单地编写和维护代码了!
- 三行代码实现.NET MVC统计显示页面的执行时间 超简单的实现方法 分析页面执行效率