22-快速排序随机选择元素的优雅解法

Posted fesng

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了22-快速排序随机选择元素的优雅解法相关的知识,希望对你有一定的参考价值。

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

面试之路(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-快速排序随机选择元素的优雅解法的主要内容,如果未能解决你的问题,请参考以下文章

关于leetcode第K个最大元素的几种解法

快速排序二

寻找数组中的第K大的元素,多种解法以及分析

topK的3种解法

八大排序总结---- 数据结构 (图解法) 面试必会! ! !

八大排序总结---- 数据结构 (图解法) 面试必会! ! !