快速排序——凑活能用版

Posted rotk2015

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了快速排序——凑活能用版相关的知识,希望对你有一定的参考价值。

  1. 快速排序是排序的经典算法,具体思路很简单,但实现起来并非那么容易!

  2. 如果使用最直观的双指针法,总会遇到神奇的问题:low<high 还是 low<=high?!(我纠结一天了真的整不明白orz…)

  3. 所以为了珍爱生命,以后就用挖坑填数法吧。。。

  4. 代码如下:

    import java.util.Arrays;
    public class QuickSort 
        public static void sort(int[] input, int low, int high)
            while(low < high)
                // no need to process low==high since one element is ordered naturally.
                int i = partition(input, low, high);
                if(pivot > k)
                    high = pivot - 1;
                else if(pivot < k)
                    low = pivot + 1;
                else
                    return;
            
        
        public static int partition(int[] input, int low, int high)
            int tmp = input[low];
            // now we can write to input[low] directly since tmp save its val;
            while(low<high)
                // loop will be break IMMEDIATELY once low==high;
                while(low<high && input[high]>=tmp)
                    high--;
                if(low<high)
                    input[low] = input[high];
                    low++;
                
    
                while(low<high && input[low]<=tmp)
                    low++;
                if(low<high)
                    input[high] = input[low];
                    high--;
                
            
            // now low==high.
            input[high]=tmp;
            return high;
        
    
        public static void main(String[] args) 
            int[] a = new int[]9,8,7,6,5,4,3,2,1;
            sort(a,0,a.length-1);
            System.out.println(Arrays.toString(a));
        
    
    
  5. 其中主体函数 sort()用递归实现,而 partition()则用了挖坑填数进行循环排序,实现简单,且最重要的是,边界条件都是一致的 low<high!!!

  6. 当然,此版本是基础版本,可改进的地方有:在排序前先随机打乱一下数组(避免pivot连续踩雷),三数取中选取pivot(尽量令pivot靠近中间),数据量小时使用插排,以及当有重复数据时,使用三分快排。

以上是关于快速排序——凑活能用版的主要内容,如果未能解决你的问题,请参考以下文章

贝克力Gulp活能卷尾鱼为什么能让鱼为之疯狂?

用友U8~给个WIN7能用的破解版或试用版

为啥输入较小时插入排序比快速排序快?

有哪些足不出户,能用十天掌握的新技能?

mindmanager下载试用版过期后,无法再次安装。

快速排序(快速排序系统学习)