快速排序
来源:互联网 发布:淘宝网苹果6不带指纹 编辑:程序博客网 时间:2024/05/10 00:01
快速排序把数据a[p,r]分成a[p,q-1],a[q+1,r]两个小数组进行排序,将小于a[q]的放于数组前半部分,后面放大着,此时的a[q]的位置已经确定好。采用递归调用对a[p,q-1],a[q+1,r]进行排序,直到顺序排完。
根据采用数组中哪个数据作为分组的依据,衍生出快速排序的随机版本,即在数组中随机选取数据a[i]作为分组依据。
#include<iostream>#include<stdlib.h>#include<time.h>using namespace std;int partition(int *a,int p,int r){if(p>r)cout<<"error";int x=a[r-1];int i=p-1;for(int j=p;j<r-1;++j){if(a[j]<=x){i++;int tmp=a[i];a[i]=a[j];a[j]=tmp;}}int tem=a[i+1];a[i+1]=a[r-1];a[r-1]=tem;return i+1;}void quicksort(int *a ,int p,int r){int q;if(p<r){q=partition(a,p,r);quicksort(a,p,q-1);quicksort(a,q+1,r);}}int randpartition(int *a,int p,int r){if(p<r){srand((int)time(0));int i=p+rand()%(r-p)+1;int tem=a[r-1];a[r-1]=a[i];a[i]=tem;return partition(a,p,r);}}void randsort(int *a,int p,int r){int q;if(p<r){q=randpartition(a,p,r);randsort(a,p,q-1);randsort(a,q+1,r);}}int main(){int num[10]={13,19,9,5,12,8,7,21,6,11};quicksort(num, 0, 10);for(int i=0;i<10;++i)cout<<num[i]<<" ";cout<<endl;int num1[10]={13,19,9,5,12,8,7,21,6,11};randsort(num1,0,10);for(int i=0;i<10;++i)cout<<num1[i]<<" ";cout<<endl;}
- 快速排序
- 快速排序
- 快速排序
- 快速排序!
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 今日毕业以及学习和工作的感想
- Qt中的 Size Hints 和 Size Policies
- PowerShell_零基础自学课程_6_PS中获取帮助信息详解、管道、格式化输
- 解决eclipse中overlaps the location of another project: 'xxxx'
- mysql循环
- 快速排序
- Intent传递图片(2)
- 解决eclipse中overlaps the location of another project: 'xxxx'
- [C] 跨平台使用Intrinsic函数范例3——使用MMX、SSE2指令集 处理 32位整数数组求和
- UbuntuServer搭建Git服务器之git和gitolite(二)
- 100盏灯经过一系列操作后最后还有多少盏灯亮着(百度的一道笔试题)
- java中system.getproperty各参数的意义
- Linux组、用户、权限相关命令练习
- VS1053ADPCM录音与播放