如何找出數組中第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