快速排序
2016-05-28 14:38
232 查看
基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。
算法介绍:设要排序的数组是A[0]……A[N-1],首先任意选取一个数据(通常选用数组的第一个数)作为关键数据,然后将所有比它小的数都放到它前面,所有比它大的数都放到它后面,这个过程称为一趟快速排序。值得注意的是,快速排序不是一种稳定的排序算法,也就是说,多个相同的值的相对位置也许会在算法结束时产生变动。
运行结果:
算法介绍:设要排序的数组是A[0]……A[N-1],首先任意选取一个数据(通常选用数组的第一个数)作为关键数据,然后将所有比它小的数都放到它前面,所有比它大的数都放到它后面,这个过程称为一趟快速排序。值得注意的是,快速排序不是一种稳定的排序算法,也就是说,多个相同的值的相对位置也许会在算法结束时产生变动。
package javaTest; public class Quicksort { public static void main(String[] args) { int[] a=new int[] {49,38,65,97,76,13,27}; sort(a,0,6); for(int i=0;i<a.length;i++){ System.out.print(a[i]+" "); } } private static void sort(int[] a, int low, int high) { if(low < high){ //递归的终止条件,一定要判断,否则会栈溢出 int i=low; int j=high; int key=a[i]; //第一个数组元素作为关键数据,赋值给key,即key=a[0] while(i<j){ while(i<j && a[j]>=key){ //从j开始向前搜索 j--; } a[i]=a[j]; //找到第一个小于key的值a[j],将a[j]和a[i]互换 while(i<j && a[i]<=key){ //从i开始向后搜索 i++; } a[j]=a[i]; //找到第一个大于key的a[i],将a[i]和a[j]互换 } a[i]=key; //第一遍快速排序不会直接得到最终结果,只会把比key大和比key小的数分到key的两边。 //需要再次对两边的数组分别执行此步骤,然后再分解数组,直到数组不能再分解为止(只有一个数据),才能得到正确结果。 sort(a, low, i-1); sort(a, i+1, high); } } }
运行结果:
相关文章推荐
- 快速排序
- 书评:《算法之美( Algorithms to Live By )》
- 动易2006序列号破解算法公布
- Ruby实现的矩阵连乘算法
- C#插入法排序算法实例分析
- 有关数据库SQL递归查询在不同数据库中的实现方法
- 超大数据量存储常用数据库分表分库算法总结
- C#数据结构与算法揭秘二
- C#中的递归APS和CPS模式详解
- C#冒泡法排序算法实例分析
- C#快速排序算法实例分析
- WinForm实现按名称递归查找控件的方法
- 算法练习之从String.indexOf的模拟实现开始
- C#算法之关于大牛生小牛的问题
- 使用SqlServer CTE递归查询处理树、图和层次结构
- C#实现的算24点游戏算法实例分析
- C#中的尾递归与Continuation详解
- c语言实现的带通配符匹配算法
- 浅析STL中的常用算法
- 算法之排列算法与组合算法详解