快速排序
来源:互联网 发布:数据库查看器 编辑:程序博客网 时间:2024/04/29 11:17
快速排序是基于分治的思想,每次都选择一个基准数,使得左边的都小于基准数,右边都大于基准数(默认基准数为每个排列第一个数),所以基本的思想是用两个指针,分别从最左边和最右边开始寻找,两个如果都找到了话就交换两个数字,需要注意的是,先从左边扫?还是先从右边扫,考虑21(基准数为2)这种情况,如果先从左边扫,寻找大于基准数的数字,找不到.算法结束,如果先从右边扫,寻找小于基准数的数字,找到了为1,交换变为12,综上,必须先从右边扫,再从左边扫(从小到大排列).
思考一下,如果是从大到小排列呢(左边比基准数大,右边比基准数小)?考虑12(基准数为1),如果先从左边扫,寻找小于基准数的数字,找到了1,交换得到序列21.算法结束,如果先从右边扫,寻找大于基准数的数字,找不到,综上,必须先从左边扫,再从右边扫(从大到小排列).
#include "iostream"using namespace std;const int maxn=1000;int a[maxn];int n;void quicksort(int l,int r){ if (l>r) { return; } int i=l,j=r; while (i<j) {//最后左边都小于基准数,右边都大于基准数 while (i<j &&a[j]>=a[l]) {//先寻找小于基准数的,i<j必须有 j--; } while (i<j &&a[i]<=a[l]) {//寻找大于基准数的,i<j必须有 i++; } swap(a[i], a[j]); } swap(a[l], a[j]);//i or j quicksort(l, i-1);//i or j quicksort(i+1, r);//i or j}int main(){ cin>>n; for (int i=1; i<=n; i++) { cin>>a[i]; } quicksort(1, n); for (int i=1; i<=n; i++) { cout<<a[i]<<' '; } cout<<endl;}//10 6 1 2 7 9 3 4 5 10 8//10 6 1 2 7 9 11 4 5 10 9
1 0
- 快速排序
- 快速排序
- 快速排序
- 快速排序!
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- dedecms添加自定义表单判断表单不能为空解决办法
- Objective-C中的instancetype和id的使用
- HTML5实现MP3上传前的预览和播放时长的获取
- golang使用protobuf
- Ionic学习--2.CSS组件
- 快速排序
- Linux下python2.7安装pip
- 怎么读官方文档
- C++并发编程超简单示例
- Android 判断手机是否安装QQ或者微信
- jdk,Python,Scala,hadoop,mysql,spark安装
- java位运算符
- serialVersionUID作用
- Web测试关注点