wangzhonglinqwe的博客

不积跬步无以至千里

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

以下对啊哈算法中,作者对多次交换优化的方面做了阐述:
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);
        }
    }
}
阅读更多
个人分类: 算法
上一篇经典算法-归并排序
下一篇通俗理解 三次握手四次挥手(老友依恋式)
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭