排序算法之(4)——快速排序
来源:互联网 发布:淘宝微星游戏本旗舰店 编辑:程序博客网 时间:2024/06/05 18:54
快速排序的思想是选取数组中的一个数为分界线,把大于它的数尽量往后放,小于它的数往前放。这样每一趟快速排序都确定一个数的最终位置,并且把数组list[p,…………,r]分成以list[q]为分界线的两个子数组。一般情况下,我们可以选择数组的最后一个元素作为分界线。
下面用例子说明:假设list[]=1 3 5 7 2 0 9 8 6 4,选取list[r]=list[9]=4为分界线
第一趟快速排序后:【1 3 2 0 】4【7 9 8 6 5】
然后对子数组【1 3 2 0】跟【7 9 8 6 5】使用相同的方法进行快速排序。
【快速排序实现一】
#include<iostream>using namespace std;//定义模板函数template <class T>void quick(int list[],int p,int q);template <class T>int partion(T list[],int p,int r);template <class T>void quick(T list[],int p,int r){ if(p<r) { int q=partion(list,p,r); quick(list,p,q-1); quick(list,q+1,r); }}template <class T>int partion(T list[],int p,int r){ //随机选取一个数与最后一个数交换 int t=rand()%(r-p+1)+p; std::swap(list[t],list[r]); T temp=list[r]; //以最后一个数为支点 int i=p-1; //这里i记录当前小于等于分界线的最后一个数的位置 for(int j=p;j<=r-1;j++) { if(list[j]<=temp) { i++; std::swap(list[i],list[j]);//将第一个大于分界线的数跟不大于分界线的数进行交换 } } std::swap(list[i+1],list[r]); //i+1位置上的数为第一个大于分界线的数 return i+1;}int main(){ int list[]={1,3,5,7,2,0,9,8,6,4}; quick(list,0,9); for(int i=0;i<10;i++) { cout<<list[i]<<" "; } cout<<endl; system("pause");}
0 0
- 排序算法之(4)——快速排序
- 算法——排序之快速排序
- 算法——排序之快速排序
- 排序算法之——快速排序
- 算法基础之排序—快速排序
- 排序算法之 —— 快速排序(五)
- 排序算法之——快速排序(Java实现)
- 排序算法之——快速排序(Java实现)
- 排序算法(4)——快速排序
- 排序算法—快速排序
- 排序算法—快速排序
- 排序算法之六 —— 快速排序算法
- 算法分析之排序:交换排序之二——快速排序(QuickSort)
- 第十五周——项目一—验证算法(4)交换排序之快速排序
- 排序算法 之 快速排序(quicksort)
- 排序算法Java——交换排序(之快速排序)
- 排序算法(2)—归并排序,快速排序
- 算法之旅——快速排序
- STL学习笔记之算法--algorithmn
- 软中断与硬中断
- IE/FF/Chrome下document.documentElement和document.body的 scrollHeight/scrollTop/clientHeight 以及判断滚动条是否已拉
- 怎样制作「用手机&电脑控制的Arduino-3D打印机器人」– IoBot?
- 不安装Oracle客户端使用PLSQL
- 排序算法之(4)——快速排序
- 字符串连接
- GitHub Android 开源项目 优秀博客
- PB实现工作流引擎
- oracle模糊查询语句使用示例
- HttpURLConnection上传大文件内存溢出的原因及解决办法
- iOS 获取 当前设备 可用内存 及当前 应用 所占内存 (转)
- GRE词汇分类之化学名词
- SQL注入漏洞全接触(一)