求陣列中第k大的數

2021-08-19 07:03:02 字數 737 閱讀 5583

文章裝載自:

使用快排,第一趟快排過後,右邊的元素都比樞軸大,左邊的都比樞軸小。當我們要求第k大的數,只需要左邊的元素個數是len-k,len是陣列總長度。

第一次快排下來,設樞軸位置是mid,如果mid>k,說明第k大元素應該在左邊序列中,遞迴左邊序列。當 mid < k 時,說明k元素在右邊序列,遞迴右邊序列,但是因為左邊序列有mid個元素,所以只要求右邊序列中k-mid個數即可。

程式中的思想就是,當這個數左邊有len-k個元素時,這個元素即是k大元素。

程式**如下:

public

class kmax

//這裡的k意思是,左邊序列的元素個數,左邊有len-k個元素,此元素就是k大元素

public

intkmaxsort(int a,int low,int high,int k)

return kmax;

} public

static

void

main(string args) ;

int k =10;

int len = a.length;

//注意k為len-k

int kmax=ktt.kmaxsort(a,0, len-1, len-k);

system.out.println(kmax);

} }

求陣列中第K大的數

本題的的陣列是可以包含重複元素的,且要求時間複雜度控制在o n 解題思路 陣列中第k大的數等價於排序陣列中第n k個數,直觀的想法是將陣列排序後取第n k個數即可,但是最快的排序演算法時間複雜度也是o nlogn 可以參考快速排序一次劃分的思想,將時間複雜度降低為o n 一次劃分可以講陣列分為三部分...

求陣列第K大的數

問題 有乙個大小為n的陣列a 0,1,2,n 1 求其中第k大的數。我們先分析原問題 有乙個大小為 n的陣列a 0,1,2,n 1 求其中第k大的數。我們先取特例,令k 1,那麼就是取最大的數,只要掃瞄一遍陣列就可以確定該值,如果k 2,則掃瞄兩邊陣列就可以確定第二大的數,依此類推下去,時間複雜度是...

C 堆 heap 求陣列中第K大的數

已知乙個未排序的陣列,求這個陣列中第k大的數字。思路 維護乙個k大小的最小堆,堆中元素個數小於k時,新元素直接進入堆 否則 當堆頂小於新元素時,彈出堆頂,將新元素加入堆。解釋 由於堆是最小堆,堆頂是堆中最小元素,新元素都會保證比堆頂小,否則新元素替換堆頂,故堆中k個元素是已掃瞄的元素裡最大的k個 堆...