码迷,mamicode.com
首页 > 编程语言 > 详细

面试之路(22)-快速排序随机选择元素的优雅解法

时间:2016-05-06 15:35:56      阅读:227      评论:0      收藏:0      [点我收藏+]

标签:

关于常规解法,请参考上一篇博客,链接如下:

面试之路(19)-快速排序详解

介绍一种优雅的解法

public int partition(int data[],int length,int start,int end) throws Exception{
        if(data == null || length <= 0||start < 0||end >= length){
            throw new Exception("invalid data");
        }
        //RandomInrange是一个随机函数,随机选取start和end中间的随机值
        int index = RandomInrange(start,end);
        //swap是一个交换函数
        swap(data[index],data[end]);
        int small = start -1;
        for(index = start; index < end;index++){
            if(data[index] < data[end]){
                ++small;
                if(small != index){
                    data[small] = data[index];
                }
            }
        }
        small++;
        swap(data[small],data[end]);
        return small;
    }
    static void quicksort(int n[], int length,int left, int right) {
        //对特殊值和边界值的检查,提高程序的鲁棒性
        if(n == null || left < 0){
        return;}
        int dp;
        if (left < right) {
            dp = partition(n, length,left, right);
            quicksort(n, length,left, dp - 1);
            quicksort(n, length,dp + 1, right);
        }
    }

面试之路(22)-快速排序随机选择元素的优雅解法

标签:

原文地址:http://blog.csdn.net/lpjishu/article/details/51318992

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!