阿布学排序之快速排序
来源:互联网 发布:温州大学网络报修 编辑:程序博客网 时间:2024/04/28 02:50
package quicksort;/** * 快速排序是一种划分交换排序,采用了分治策略,时间复杂度为O(NlogN),总共需要logN次选取基准数,整个是一个树结构,每一层的复杂度是O(N),所以总共是O(NlogN) * 思想: * 1、先从数列中取出一个数作为基准数 * 2、将比这个数大的数全都放到它的左边,比它小的全都放它右边 * 3、再对左右区间重复第二步,直到各区间只有一个数 * @author AbuGe * 例: * 01 2 3 4 5 6 7 8 9 * 7265788604283734895 * 将取值比喻成挖坑 *步骤: *1、选择基准数,挖个坑,这里用0个元素,确定左右区间i = R, j = L *2、从后向前遍历,如果比基准数大则j--,直到比基准数小(前提是i < j),找到后将j对应的值赋给挖的坑,这个j对应的值就出现了新的坑,将i++,继续下个数的比较 *3、从前向后遍历,如果比基准数小则i++,直到比基准数大(前提是i < j),这个j对应的值就出现了新的坑找到后将i对应的值赋给挖的坑,将j--,继续下个数的比较 *4、重复2和3步,直到i == j,将基准数填入到a[i]中 */public class QuickSortDemo {public static int adjustArray(int array[], int left, int right){//第一步挖坑,确定基准数与基准区间int i = left;int j = right;int base = array[i];//循环排序while(i < j){//第二步从后向前比较while(i < j && base <= array[j]){j--;}//确定是否是由于base <= array[j]引发的上一个while的退出,如果是则将a[j]填入上一次的坑if(i < j){array[i] = array[j];i++;}//第三步从前向后比较while(i < j && base >= array[i]){i++;}//确定是否是由于base <= array[j]引发的上一个while的退出,如果是则将a[i]填入上一次的坑if(i < j){array[j] = array[i];j--;}}//此时i == j,执行第四步array[i] = base;return i;}//运用分治和递归的方法进行快速排序,完成递增排序public static void quickSort(int[] array, int left, int right){if(left < right)//这个判断至关重要,这是递归判断的出口,这个必须有!!!!!!!!!!!!!{//先挖坑填数,将数组分成两部分,获得分区下标iint i = adjustArray(array, left, right);//左区间递归调整quickSort(array, left, i - 1);//右区间递归调整quickSort(array, i + 1, right);}}public static void main(String[] args){int[] array = {72, 6, 57, 88, 60, 42, 83, 73, 48, 95};int len = array.length;System.out.print("排序前:");for(int a : array){System.out.print(a + " ");}quickSort(array, 0, len - 1);System.out.println();System.out.print("排序后:");for(int a : array){System.out.print(a + " ");}}}
0 0
- 阿布学排序之快速排序
- 阿布学排序之堆排序
- 阿布学排序之归并排序
- 阿布学排序之直接选择排序
- 阿布学排序之直接插入排序
- 阿布学排序之希尔排序
- 阿布学排序之冒泡排序
- 菜鸟学排序----快速排序
- 菜鸟学排序:快速排序
- 二哥学算法之快速排序和堆排序
- 排序之快速排序
- 排序之 快速排序
- 排序之快速排序
- 排序之------快速排序
- 排序之快速排序
- 排序之快速排序
- 排序之快速排序
- 排序之快速排序
- 马甲王GTX880M实测 功用高端但无法通吃
- SVN客户端show log出错的解决方案
- String和StringBuffer,StringBuilder
- LINUX 解决linux ping: unknown host www.baidu.com
- php写的九九乘法表代码
- 阿布学排序之快速排序
- from local coordinate coding to local constrained linear coding
- FICO常用的IDOC程序、表和IDOC出口
- IO端口与IO内存
- 读《程序员求职之道》(三)
- java基础:IO(九)
- JUnit 百度百科
- 设计模式之原型模式
- IDOC的debug、错误处理和各项IDOC信息查询(各种查询,全)。