手写快速排序
2016-03-23 00:20
232 查看
快速排序
排序在各种场合经常被用到。
快速排序是十分常用的高效率的算法。
其思想是:先选一个“标尺”,
用它把整个队列过一遍筛子,
以保证:其左边的元素都不大于它,其右边的元素都不小于它。
这样,排序问题就被分割为两个子区间。
再分别对子区间排序就可以了。
主要思想:先选择第一个数字作为标尺,然后分别从第二个数字往右找,找到比第一个数大的数,和从倒数第一个数字往左找,找到比第一个数小的数,然后将找到的两个数进行交换,一直下去,知道j
排序在各种场合经常被用到。
快速排序是十分常用的高效率的算法。
其思想是:先选一个“标尺”,
用它把整个队列过一遍筛子,
以保证:其左边的元素都不大于它,其右边的元素都不小于它。
这样,排序问题就被分割为两个子区间。
再分别对子区间排序就可以了。
主要思想:先选择第一个数字作为标尺,然后分别从第二个数字往右找,找到比第一个数大的数,和从倒数第一个数字往左找,找到比第一个数小的数,然后将找到的两个数进行交换,一直下去,知道j
#include <cstdio> #include<iostream> using namespace std; void swap(int a[], int i, int j) { int t = a[i]; a[i] = a[j]; a[j] = t; } int partition(int a[], int p, int r) { int i = p; int j = r + 1; int x = a[p]; while(1){ while(i<r && a[++i]<x); while(a[--j]>x); if(i>=j) break; swap(a,i,j); } swap(a,p,j); return j; } void quicksort(int a[], int p, int r) { if(p<r){ int q = partition(a,p,r); quicksort(a,p,q-1); quicksort(a,q+1,r); } } int main() { int i; int a[] = {5,13,6,24,2,8,19,27,6,12,1,17}; int N = 12; quicksort(a, 0, N-1); for(i=0; i<N; i++) printf("%d ", a[i]); printf("\n"); return 0; }
相关文章推荐
- 堆排序练习(Heap Sort)
- Codeforces 300B Coach 【并查集】
- iOS Safari阅读模式分析过程
- post带参数转为get
- Linux笔记(68)——nginx缓存配置及其他配置
- 在Android子线程中初始化handler后,为什么该子线程也能更新UI?
- OBIEE中JS的使用 ---- 视图选择器居左
- JVM-垃圾收集器
- ubuntu如何进行VNC?
- 聊天对话界面功能
- 利用center(中点)来移动按钮
- 安卓--获取应用版本名称与版本号
- PHP学习笔记-PHP语言基础2
- 关于lambda
- java枚举使用详解
- DroidPlugin代码分析(一) 背景知识
- Python点滴(一)
- String笔试题
- Struts2访问Servlet API的三种方式
- Ajax简单应用-购物车