快速排序的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]+"-->");
}
}

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值