经典排序-快速排序(交换优化)

以下对啊哈算法中,作者对多次交换优化的方面做了阐述:
1、代码的核心是 一定一定要从右边先开始,因为在最后结束的时候代码的判定是将左侧的下表为i的数据移到原本的基准下表处,也就是start;
2、同时if的排定条件一定是 < 用来交换排序的两个数,如果是 <=那么会在最后一个相遇的时候,出现不必要的操作;
3、为什么不查到一次就交换一次呢?
因为:你会发现在左右各进行了一次交换操作的时候,对原本基准点的操作等同于没有进行修改,故而优化一次写入,加快运行速度

package jvm;

public class fastsort {
    static int[] a = {1,54,6324,4312,12,21}; 
    public static void sort(int start, int end) {
        if(start > end)
            return;
//      存取一个基准数
        int temp = a[start];
        int i = start ;
        int j = end;
        while(i != j ) {
//          一定要先从右往左开始 ,否则会发生数组越界,为的是处理最后相遇的情况判断
            while(a[j] >= temp && i<j) j--;
            while(a[i] <= temp && i<j) i++;
//          如果没有相遇那么就要交换2个否则就只是换基准数和当前相遇位置
            if(i < j) {
                int mem = a[j];
                a[j] = a[i];
                a[i] = mem;
            }

            a[start] = a[i];
            a[i] = temp;
//          基准数不要在动了
            sort(start, i-1);
            sort(i+1, end);
        }
    }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值