快速排序是非常经典的排序,也是非常常用的排序,主要是找到一个基准进行比较,分成2部分,基准左边的小于基准,基准右边的大于基准,代码如下:
package com.lxj.alg; public class QuickSorted { public static void main(String[] args) { int [] array = {545,654,2,-11,24,745,58,35,64,75,253,35}; //int [] array = {10,9,8,7,6,5,4,3,2,1,0}; quickSorted(array,0,array.length-1); for (int i : array) { System.out.print(i+" "); } } private static void quickSorted(int[] array, int start, int end) { if(start < end) { //lookForLocation 返回一趟快速排序的结果, //也就是确定了边界线(边界线实际上就是你用来比较的靶子) //左边的比右边的都小 int loc = lookForLocation(array,start,end); //类似二分法,递归分治的思想,靶子左边和右边的分别继续递归排序 quickSorted(array,start,loc-1); quickSorted(array,loc+1,end); } } private static int lookForLocation(int[] array, int start, int end) { int i = start,j = end; //temp就是靶子,也就是我用来分割的基准, //我用的是array中的第一个元素来进行左边跟右边的划分 //好比: 44,33,25,67 44是我的基准, //这一趟排序后我要将数组变成 25,33,44,67 int temp = array[start]; while(i < j){ //从数组右边找,直到找到比基准小的整数 while(array[j] >= temp && i < j) j--; //找到比基准小的数就将它复制给array的第一个索引的位置, //因为第一个索引的位置我用temp记录下来了 array[i] = array[j]; //然后从数组左边找,直到找到比基准大的整数 while(array[i] <= temp && i < j) i++; //大于基准的赋值给j位置的整数, //因为前面我已经记录下array[j]的值:array[i] = array[j]; array[j] = array[i]; } //最后讲temp中的值赋值回去,因为前面while循环中有一个重复数据 array[i] = temp; //返回这趟划分的基准的位置(也就是左边小于或等于temp,右边大于或等于temp) return i; } }
上述代码有详细的注解,也可查看我的 CSDN JAVA实现快速排序
点击查看更多内容
1人点赞
评论
共同学习,写下你的评论
评论加载中...
作者其他优质文章
正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦