数据结构之快速排序

"沉默加速度是我的脚步

奔跑在视线里的路

我不要祝福不理会孤独

奔向最远处…"

以这首歌献给快速排序,也献给自己以及奋斗在路上的伙伴们,在码路上能自由得加速度,一起奔向自己想要的更远处.

public class Quick{

    //
    public static void sort(Comparable[] a){
		int left = 0;//左边下标从0开始
        int right = a.length-1;//右边下标为长度-1开始
        sort(a, left, right);//排序数组,传入数组及左边下标和最大下标
    }
    //
    private static void sort(Comparable[] a, int left, int right){
        if(right <= left){//右边下标数必须大于左边下标数,否则跳出程序
            return;
        }
    	int partition = partition(a, left, right);
        sort(a, left, partition - 1);
        sort(a, partition + 1, right);
    }

    //将数组分割成左右两边,并返回分割的分界值的下标
    private static int partition(Comparable[] a, int left, int right){
       Comparable key = a[left];//key为将数组分割左右的分界值
        int startL = left;//从左边的下标开始
        int startR = right + 1;//从右边的下标+1开始
        while(true){
            while(less(key, a[--startR])){//分界值与右边下标向左的数相比,找到比分界值小的数停止
                if(startR == left){//当右边开始下标向左到达最左边时跳出循环
                    break;
                }
            }
            while(less(a[++startL], key)){//分界值与左边下标向右的数相比
                if(startL == right){//当左边开始下标向右到达最右边时跳出循环
                    break;
                }
            }
            if(startL >= startR){//如果左边开始的下标大于等于右边开始的下标,停下
                break;
            }else{
                exch(a, startL, startR);//否则左右开始下标索引对应的数值互换
            }
        }
        exch(a, left, startR);//分界值下标 与 左右开始而重合的下标 索引对应的值互换
        return startR;//将重合的下标作为新的分界值下标返回
    }
    //比较哪个元素更小
    private static boolean less(Comparable v, Comparable w){
        return v.compareTo(w) < 0;
    } 
    private static void exch(Comparable[] a, int i, int j){
        Comparable temp;
        temp = a[i];
        a[i] = a[j];
        a[j] = temp;
    }
}

数据结构之排序篇还有第二季喔,不过可能稍微要再等等,明天想把整理的一些Hadoop相关的知识也分享一点.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值