找陣列中第k大的數

2021-06-20 23:46:30 字數 740 閱讀 1014

但會修改陣列中的資料,所以這裡有新的不修改資料的思路:

1、用multiset實現自動排序,大小為k,每個數與set中最大的數比較,如果小於則替換。

2、可以用最大堆來實現,方法類似上面的。關鍵是看**注釋在下面。

時間複雜度為:

#include#include#includeusing namespace std;

int numbers[100];

//從vector獲取資料

void getnumbers(vector& numbers)

}//用模板找出第k個數

void templatefindk(const vector& numbers)

//用堆找第k大的數

void heapfindk()

printf("輸入要查詢的數字置\n");

scanf("%d",&k);

int *heap = (int *)malloc(sizeof(int)*k);

int i =0;

while(inumbers;

printf("用模板找\n");

getnumbers(numbers);

templatefindk(numbers);

// printf("用堆來找\n");

heapfindk();

system("pause");

return 0;

}

無序整數陣列中找第k大的數

寫一段程式,找出陣列中第k大小的數,輸出數所在的位置。解法一 我們先假設元素的數量不大,例如在幾千個左右,在這種情況下,那我們就排序一下吧。在這裡,快速排序或堆排序都是不錯的選擇,他們的平均時間複雜度 都是 o n log2n 然後取出前 k 個,o k 總時間複雜度 o n log2n o k o...

無序整數陣列中找第k大的數

經典問題 寫一段程式,找出陣列中第k大的數,輸出數所在的位置。我們先假設元素的數量不大,例如在幾千個左右,在這種情況下,那我們就排序一下吧。在這裡,快速排序或堆排序都是不錯的選擇,他們的平均時間複雜度 都是 o n logn 然後取出前 k 個,o k 總時間複雜度 o n logn o k o n...

nth element 找第k大的數

nth element用於排序乙個區間,它使得位置n上的元素正好誰全排序情況下的第n個元素,而且,當nth element返回的時候,所有按照全排序規則排在位置n之前的元素也都排在位置n之前,按照全排序規則排在n之後的元素全都排在位置n之後。所以,我們使用nth element既可以尋找最好的前k個...