快速排序
来源:互联网 发布:哪款学英语软件好 编辑:程序博客网 时间:2024/05/16 15:07
#include <iostream>using namespace std;#define N 10int a[N] = {3,6,9,1,2,5,7,4,0,8};void quick(int left, int right){int sign = a[left];int i = left;int j = right;if(left > right)return ;while (i != j){while (i < j && sign <= a[j])//从右往开始找到此时数组中比第一个数小的位置的坐标jj--;while (i < j && sign >= a[i])//从左往开始找到此时数组中比第一个数大的位置的坐标ii++;if (i < j)//将i和j对应数组的数值交换{int tmp = a[i];a[i] = a[j];a[j] = tmp;}}//以上while循环结束后,得到他们的交遇点iint tmp1 = a[i];//将此时数组的第一个数和交遇点i对应数组的数值交换a[i] = a[left]; a[left] = tmp1; quick(left,i-1); //将此时数交遇点i-1之前数组进行排序 quick(i+1,right);//将此时数交遇点i+1之后数组进行排序}int main(){for (int i =0; i < N; i++)cout<<a[i]<< " ";cout<<endl;quick(0, N-1);for (i =0; i < N; i++)cout<<a[i]<< " ";cout<<endl;return 0;}
快速排序的解题思路
先从数组右边开始往左找到比第一个数小的做标记①
然后从数组左边开始往右找到比第一个数大的做标记②
之后交换这俩个数
继续从标志①往左搜索,再从标志②往右搜索,
如果标志①和标志②未相遇,继续重复以上步骤
直到标志①和标志②到达同样位置
首地址和标志③交换
以标志③为中心,分开成两个部分,分别处理,也就说两个数组分别重复以上步骤
0 0
- 快速排序
- 快速排序
- 快速排序
- 快速排序!
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- ZooKeeper系列之五:ZooKeeper的运行
- 什么时候需要使用引用
- 神奇的excel:在excel中画混淆矩阵
- poj2728--Desert King(最优比率生成树)
- 一些常用的 sql语句总结
- 快速排序
- HDU--2020
- OpenGL三角形的双面不同颜色的绘制
- 反病毒工具-C32ASM
- 续期Replace Pioneer,不需要破解、购买注册码(KEY)
- 创建线程的三种方式
- 29.满大街创业团队的年代,一不小心就被忽悠
- linux下的常用命令
- NYOJ63 小猴子下落 (模拟二叉树)