如何找出数组中第k小的数


题目描述:给定一个整数数组,如何快速地求出该数组中第k小的数。假如数组为{4,0,1,0,2,3},那么第3小的元素是1。

 

分析与解答:

 首先想到的是给数组排序,然后根据下标是K-1 的数,由于只要求第k小的数,因此,没有必要对数组进行完全排序,只需要对数组进行局部排序就可以了。下面分别介绍这几种不同的实现方法。

 

方法一:排序法 (不推荐)

由于最高效的排序算法(例如快速排序)的平均时间复杂度为O(Nlog2N)

方法二:部分排序法

由于只需要找出第k小的数,因此,没必要对数组中所有的元素进行排序,可以采用部分排序的方法。具体思路为:通过对选择排序进行改造,第一次遍历从数组中找出最小的数,第二次遍历从剩下的数中找出最小的数(在整个数组中是第二小的数),第k次遍历就可以从N-k+1(N为数组的长度)个数中找出最小的数(在整个数组中是第k小的)。这种方法的时间复杂度为O(n*k)。当然也可以采用堆排序进行k趟排序找出第k小的值。

方法三:快速排序方法 (推荐)

快速排序的基本思想是:将数组array[low…high]中某一个元素(取第一个元素)作为划分依据,然后把数组划分为三部分:(1)array[low…i-1](所有的元素的值都小于或等于array[i])、(2)array[i]、(3)array[i+1…high](所有的元素的值都大于array[i])。在此基础上可以用下面的方法求出第k小的元素:

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM