排序之快速排序
2020-12-13 02:52
标签:思想 交换 用例 new ret 数组 com @param 排序 排序之快速排序 标签:思想 交换 用例 new ret 数组 com @param 排序 原文地址:https://www.cnblogs.com/youzoulalala/p/11058911.htmlpackage QuickSort;
import MergeSort.MegerSort;
import chooseSort.Example;
/**
* 快速排序
* 思想:分而治之;
* 不断地以第一个元素为基准对当前数组进行分割,直到子数组只有一个元素
*/
public class QuickSort extends Example
{
public void sort(Comparable[] a, int lo,int hi) {
if (lo>=hi) return;
int j = partition(a,lo,hi); //原地切分
sort(a,lo,j-1);
sort(a,j+1,hi);
}
private int partition(Comparable[] a, int lo, int hi) {
int i = lo;
int j = hi+1; //note
Comparable v = a[lo];//基准数
while (true){
//i指向数组范围内比基准数大的值,或者数组最后一个元素
//j指向数组范围内比基准数小的值,或者数组第一个元素
while (less(a[++i],v)) if(i==hi) break;
while (less(v,a[--j])) if(j==lo) break;
//判断
if(i>=j) break;
//交换
exch(a,i,j);
}
exch(a,lo,j);
return j;
}
/**
* 测试用例
* @param args
*/
public static void main(String[] args) {
Integer[] a = new Integer[]{1,6,34,2,5,3,4,45,6,22};
QuickSort sort = new QuickSort();
// sort.merge(a,0,2,a.length-1);
sort.sort(a,0,a.length-1);
show(a);
System.out.println(isSorted(a));
}
}
上一篇:在Windows下安装pip
下一篇:利用d3.js绘制中国地图