快速排序的Java实现_world

package com.atguigu.me.algorithm.sort;

public class QuickSort {

public static void sort(Comparable[] c){

sort(c,0,c.length-1);

}

private static void sort(Comparable[] c, int lo, int hi) {

if(hi<=lo) return ;

int j = partition(c,lo,hi);

sort(c,lo,j-1);

sort(c,j+1,hi);

}

private static int partition(Comparable[] c, int lo, int hi) {

int i = lo, j = hi;

Comparable v= c[lo];//第一个元素

//这段代码按照c[lo]的值进行切分:就是移动i、j指针直到左边都小于c[lo],右边都大于c[lo]

while(true){

//扫描左右,检查扫描是否结束并交换元素

//当左边都小于c[lo]且指针已经相遇,停止循环

while(less(c[++i],v)){

if(i==hi){

break;

}

}

//当右边都大于c[lo]且指针已经相遇,停止循环

while(less(v,c[–j])){

if(j==lo){

break;

}

}

//当指针相遇, 停止循环

if(i>=j) break;

//前面所有条件(当左边都小于c[lo]且指针已经相遇;当右边都大于c[lo]且指针已经相遇;当指针相遇)不符合时, 交换c[i] 和 c[j]值。

exch(c,i,j);

}

//然后把该指针处的值和c[lo]交换  exch(c,lo,j);

exch(c,lo,j);

//返回转换后j的指针值

return j;

}

public static <T extends Comparable<T>> void exch(T[] ts,int t,int min){

T temp = ts[t];

ts[t] = ts[min];

ts[min] = temp;

}

public static <T extends Comparable<T>> boolean less(T t1,T t2){

return t1.compareTo(t2) <0;

}

public static void main(String[] args) {

Integer[] ins = new Integer[]{9,10,4,3,5,1,6,-4,100,67,56,3,9,706};

sort(ins);

for(int i = 0;i<ins.length;i++){

System.out.print(ins[i]+”–>”);

}

}

}

点赞