快速排序代码(选择最右值最为枢纽元)
来源:互联网 发布:内网yum服务器 编辑:程序博客网 时间:2024/06/11 14:41
参考了《数据结构域算法分析》书上部分代码,结合自己的理解写出的快速排序程序。书上用三数中值分割法来选择枢纽元,有它的好处,但我觉得使得代码很多地方不够直观。我选择数组的最后一个元素作为枢纽元,然后实现了快排。
关于快排的原理可以去看我博客转载的文章,很直观:点击打开链接
快排的步骤就是:
1.选择枢纽元
2.将小于枢纽元的数放前面,大于枢纽元的数放后面,枢纽元放中间
3.然后对枢纽元左右两个部分继续进行1和2
下面程序中最主要的是Quicksort,实现了快排的原理,而子函数Qsort只是为了简洁的调用Quciksort而写的。Quicksort中有很多输出语句,只是为了把快排的每一个递归都显示出来,可以无视。
#include <iostream>using namespace std;void swap(int *a, int *b){int temp;temp = *a;*a = *b;*b = temp;}void Quicksort(int a[], int Left, int Right){int i ,j;int Pivot = a[Right]; //选取数组最右的值为枢纽元if( Left < Right ) //读入a[]至少有两个数据才能进入后续步骤{i = Left;j = Right-1; //由于最右为枢纽元,所以实际操作中的数组最右是Right-1for( ; ; ){while( a[i] < Pivot && i<Right ) {i++;} // i<Right 防止越上界while( a[j] > Pivot && j>=Left ) {j--;} // j > 0 防止越下界if( i < j ){swap( &a[i], &a[j] );i++;j--;for(int i=0;i<10;i++){cout<<a[i]<<' ';}cout<<endl;}elsebreak;}swap(&a[i], &a[Right]);for(int i=0;i<10;i++){cout<<a[i]<<' ';}cout<<endl;Quicksort(a, Left, i-1);Quicksort(a, i+1, Right);}}void Qsort(int a[], int N){Quicksort( a, 0, N-1 );}void main(){int a[10] = { 10, 6, 4, 8, 3, 9, 1, 5, 2, 7};int N = 10;cout<<"初始数组为:"<<endl;for (int i=0; i<10; i++){cout<<a[i]<<' ';}cout<<endl;cout<<"快排步骤及结果:"<<endl;Qsort( a, N );}结果为:
0 0
- 快速排序代码(选择最右值最为枢纽元)
- 快速排序枢纽值(基元)选择方法(转载)
- 快速排序的枢纽元选取策略
- 快速排序普通法与中值枢纽元法以及三切法
- 选择排序、快速排序代码
- 快速排序-常见中轴(主元pivot)选择方法及实现代码(末位/随机/三数中值/..)
- 高级排序-快速排序,最右边的值为枢纽
- 快速排序基于不同枢纽的实现方法
- 排序总结(代码实现):选择排序,插入排序,归并排序,快速排序,堆排序
- 冒泡、选择、插入、归并、快速排序代码
- C语言常用的几种排序算法代码(选择排序,冒泡排序,插入排序,快速排序)
- PAT_1045 快速排序(主元个数)
- 快速排序,选择排序
- 选择排序/快速排序
- 快速排序,选择排序
- 算法实践篇-基于快速排序原理的选择第i小元选择算法
- 冒泡排序,选择排序,插入排序,快速排序(PHP)
- 三数中值作为枢纽元方法
- Redesign Your App for iOS 7 之 页面布局
- 必读博客
- "Stops" does not contain valid input for any route
- 俞敏洪:有些事,年轻时不做会后悔一辈子
- XE6打开XE5工程 false is not a valid integer value
- 快速排序代码(选择最右值最为枢纽元)
- Yii 国际化的实现
- C#中遍历当前所有进程时存在的陷阱
- 使用sqoop将MySQL数据库中的数据导入Hbase
- web爬虫
- Android Apk自动更新service(直接拿来用)
- Android布局文件的加载过程分析:Activity.setContentView()源码分析
- ubuntu12.04+hadoop2.3.0+eclipse+IHPI安装配置
- leetcode Reverse Words in a String