在O n 時間內查詢陣列內第k小的數

2021-07-25 02:11:32 字數 640 閱讀 6451

前一陣子做作業,看到了這個,要求在 o(n) 時間內查詢前 k 小的 k 個數,

給出的提示是,先在 o(n) 時間內查詢到第 k 小的數.由此想到,此前一直用

的 sort 函式,排完序後找下標為 k-1 的那個數,卻從來沒有考慮過具體的

實現.結合前一陣子學習的快速排序演算法,大致對此有了新的認識.

首先給出乙個函式,可以求出軸值在(排完序的)陣列中的位置.

這裡是假設區間的第乙個數為軸值.

int partition(int array,int left,int right)//二分查詢區間

array[i] = pivot;

return i;//返回軸值的位置

}

下面再進行二分查詢,查詢第 k 小的數.

int find(int array,int left,int right,int k)

這裡,find函式的返回值就是第k小的數val。

接下來,將這個數val作為軸值,呼叫partition函式,即可得到分成兩

塊的區間,左邊區間的數全部不大於val。左邊的區間裡的數即為所

求。整個演算法的時間複雜度為o(n).

在O n 時間內找出最小的k個元素

思想 1.用大頭堆實現 2.類似快速排序實現 1.用大頭堆實現 程式設計師面試一百題 解法 2.類似快速排序實現 程式猴 include stdafx.h include include include include include using namespace std 每次將陣列劃分為兩部分,...

選擇問題 線性時間內找到序列的第k小的元素

選擇問題 在序列中按順序找到某個元素。這可以用排序方法做到,即先排個序,在找到指定元素,但是這樣就按最快的堆排序 合併排序啥的都得是o nlgn 數量級的,這裡採取的方法可以在期望為o n 的時間內完成。具體的實現方式如下 int select int a,int begin,int end,int...

MongoDB查詢某段時間內的資料

在mysql裡面可以用between.and.或者 來查詢指定的時間範圍資料,但是mongodb有自己的語法。mongodb裡比較,用 gt gte lt lte 分別對應 組合起來可以進行範圍的查詢。比如查昨天的,就可以用 db.collectionaaa.find count 注意,開始的時候日...