面試演算法 尋找第K大的數 快速排序的應用

2021-07-10 21:26:43 字數 784 閱讀 7189

有乙個整數陣列,請你根據快速排序的思路,找出陣列中第k大的數。

給定乙個整數陣列a,同時給定它的大小n和要找的k(k在1到n之間),請返回第k大的數,保證答案存在。

測試樣例:

[1,3,5,2,2],5,3

返回:2

public class 尋找第k大的數 ;

system.out.println(findkth(a, a.length, 2));

/** qsort(a, 0, a.length-1); for(int i:a)

*/} public static int findkth(int a, int n, int k)

static void qsort(int a, int left, int right)

} static int qs(int a, int left, int right, int k) else if (p > k)

return qs(a, left, p - 1, k);

else

return qs(a, p + 1, right, k);

} }static int partition(int a, int left, int right)

if (left < right)

while (left < right && a[left] <= p)

if (left < right)

} a[left] = p;

return left;

}}

堆排序尋找第K大的數

首先buildheap,build heap是指讓陣列符合堆的性質,最大堆就是根節點的值 子節點的值。第一步build完之後,arr 0 就是最大的元素 然後執行k 1次調整,就會把第k大的元素調整到arr 0 的位置。要第一大的元素,就不需要再調整了,要第二大就再調整一次,以此類推.返回arr 0...

尋找第K大的數

題目描述 要求在n個不重複的整數中,找出第k大的整數 其中0輸入第一行為兩個正整數n k 第二行為n個整數,輸入保證這n個整數兩兩相異,每個整數的範圍在 1000000到1000000之間 輸出輸出第k大的整數值 樣例輸入 5 33 2 4 5 1 樣例輸出 3 如下 include include...

尋找第K大的數

在一堆資料中查詢到第k個大的值。名稱是 設計一組n個數,確定其中第k個最大值,這是乙個選擇問題,解決這個問題的方法很多。所謂 第 前 k大數問題 指的是在長度為n n k 的亂序陣列中s找出從大到小順序的第 前 k個數的問題。解法1 我們可以對這個亂序陣列按照從大到小先行排序,然後取出前k大,總的時...