演算法設計 查詢無序陣列中第K大的數字

2021-06-12 12:51:12 字數 438 閱讀 6610

給出乙個陣列,要求查詢出這個陣列中按順序排第k大的數字。

思路:利用快速排序的思想,把陣列中的元素分治,並計算中間值的位置,如果是k,則這個數就是第k大的數字,如果比k小,那麼再次利用快速排序分治中值以後的資料,如果比k大,則排序前面的數字,直到找到k的位置。

下面給出c++實現的**:

#include #include using namespace std;

int partition(int data,int first,int last) //¿ìëùååðòµä·öî»

return kth;

}int main(int argc, char *argv)

; //õýè·µäë³ðòê磺5,6,7,9,11,14,17,18,21,27

int t=findkth(a,1,10,6);

cout<

從無序陣列中找出第K大的數

該題目的兩種實現方式,第一種是用堆排序 其中陣列用到了二叉樹的性質 第二種是利用快速排序來實現.最大堆進行公升序排序,主要步驟是 1.初始化堆 將數列a 1.n 構造成最大堆。2.交換資料 將a 1 和a n 交換,使a n 是a 1.n 中的最大值 然後將a 1.n 1 重新調整為最大堆。接著,將...

無序數字中位數 如何在無序陣列中查詢第K小的值

如題 給定乙個無序陣列,如何查詢第k小的值。例子如下 在乙個無序陣列,查詢 k 3 小的數 輸入 arr 輸出 7在乙個無序陣列,查詢 k 4 小的數 輸入 arr 輸出 10幾種思路如下和複雜度分析如下 1 最簡單的思路直接使用快排,堆排或者歸併排,排序之後取陣列的k 1索引的值即可,時間複雜度為...

快速排序 尋找無序陣列中的第k大的數

思路是利用快速排序 因為快速排序的分治思想可以將查詢的範圍縮小 快速排序的思想 low為陣列的起始點,high為陣列的尾部點。交替掃瞄 1.固定陣列的第乙個數為定點,從陣列的尾部high開始往左查詢,直到第乙個比定點小的數,和定點交換,因此當前點為空 high 2.從陣列的起始處,low找到第乙個比...