排序原理:
-
首先设定一个分界值,通过该分界值将数组分为左右两部分
-
将小于该分界值的元素置于左边,大于的元素置于右边
-
左右两边独立排序
-
重复此操作,知道两两排序后返回
public class quick { //交换 public static void exch(Comparable[] a,int i,int j) { Comparable temp; temp=a[i]; a[i]=a[j]; a[j]=temp; } public static boolean less(Comparable i, Comparable j) { return i.compareTo(j)<0; } public static void sort(Comparable[] x) { int lo=0; int hi=x.length-1; sort(x,lo,hi); } public static void sort(Comparable[] x,int lo,int hi) { //进行安全性校验 if(hi<=lo) { return; } //将数组分为左子组和右子组 int i=partition(x,lo,hi); //将左子组排序 sort(x,lo,i-1); //将右子组排序 sort(x,i+1,hi); } private static int partition(Comparable[] x,int lo,int hi) { int left=lo; int right=hi+1; Comparable key=x[lo]; while (true){ while (true) { if(right==lo) { break; } if(less(x[--right],key)) { break; } } while (true) { if (left==right) { break; } if (less(key,x[++left])) { break; } } if (left>=right) { break; } else { exch(x,left,right); } } exch(x,lo,left); return left; } }
import java.util.Arrays; public class QuicklyTest { public static void main(String[] args) { Integer[] array={1,5,-8,5,-1,14,-9,7,-8}; Integer[] array2={-3,-2,-1,0,1,2,3}; quick.sort(array); quick.sort(array2); System.out.println(Arrays.toString(array)); System.out.println(Arrays.toString(array2)); } }