快速排序算法
2015-09-28 19:18
281 查看
快速排序的原理:
1)设置两个变量i、j,排序开始的时候:i=0,j=N-1;
2)以第一个数组元素作为关键数据,赋值给key,即key=A[0];
3)从j开始向前搜索,即由后开始向前搜索(j–),找到第一个小于key的值A[j],将A[j]和A[i]互换;
4)从i开始向后搜索,即由前开始向后搜索(i++),找到第一个大于key的A[i],将A[i]和A[j]互换;
5)重复第3、4步,直到i=j即确定了key的位置,接着将可从key的位置将数组拆分成左右两个数组(不包括key值),然后对这两个数组采取同样的操作最后就可以得到结果(采用递归思想)
1)设置两个变量i、j,排序开始的时候:i=0,j=N-1;
2)以第一个数组元素作为关键数据,赋值给key,即key=A[0];
3)从j开始向前搜索,即由后开始向前搜索(j–),找到第一个小于key的值A[j],将A[j]和A[i]互换;
4)从i开始向后搜索,即由前开始向后搜索(i++),找到第一个大于key的A[i],将A[i]和A[j]互换;
5)重复第3、4步,直到i=j即确定了key的位置,接着将可从key的位置将数组拆分成左右两个数组(不包括key值),然后对这两个数组采取同样的操作最后就可以得到结果(采用递归思想)
#include <stdio.h> void quickSort(int *a,int low,int high){ int position; if(low<high){ position=findPosition(a,low,high); quickSort(a,low,position-1); quickSort(a,position+1,high); } } int findPosition(int *a,int low,int high){ int temp=a[low]; while(low<high){ while(low<high && a[high]>temp) --high; a[low]=a[high]; while(low<high && a[low]<=temp) ++low; a[high]=a[low]; } a[low]=temp; return low; } int main(void){ int a[11] = { 2, 1, 0, 5, 4, 3 ,6,4,7,4,3}; quickSort(a,0,10);//0 9 are index of array int i; for(i=0;i<11;i++){ printf("%d ",a[i]); } return 0; }
相关文章推荐
- 快速排序
- 动易2006序列号破解算法公布
- Ruby实现的矩阵连乘算法
- C#插入法排序算法实例分析
- Lua和C语言的交互详解
- 超大数据量存储常用数据库分表分库算法总结
- C#数据结构与算法揭秘二
- C#中的递归APS和CPS模式详解
- C#冒泡法排序算法实例分析
- C#快速排序算法实例分析
- WinForm实现按名称递归查找控件的方法
- 算法练习之从String.indexOf的模拟实现开始
- C#算法之关于大牛生小牛的问题
- C#实现的算24点游戏算法实例分析
- C#中的尾递归与Continuation详解
- 关于C语言中参数的传值问题
- 简要对比C语言中三个用于退出进程的函数
- 深入C++中API的问题详解
- 基于C语言string函数的详解
- C语言中fchdir()函数和rewinddir()函数的使用详解