找出陣列前N大的數

2021-08-06 01:14:30 字數 1362 閱讀 6027

這個題也是個比較有名的面試題.當然有很多變種.

題目意思基本是:從乙個資料量很大的陣列裡找前n大的元素.不允許排序.

這個題有兩個比較好的思路:

思路一:用快速排序的思想,是思想,不是要排序;

思路二:用最大堆的思想.

我暫時只實現了思路一,思路二我之後實現了會補上.

思路一比較簡單了.我們先用快排的思想找出第n大的數,然後帶上後面n-1個就完事了.因為後面的都比支點數大.

怎麼找第n大的數?我在之前的部落格寫過,請移步到  找第n大的數

**:

#include#include

/*找出第n大的數的下標

*/int choose_nth(int a, int startindex, int endindex, int

n);/*

找出前n大的數

*/void choose_max_n(int a,int startindex, int endindex, int

n);int main(int argc, char *argv)

;

intn,i;

printf(

"陣列是:\n");

int an = sizeof(a)/sizeof(int

);

for(i = 0; i < an; ++i)

printf(

"%d

",a[i]);

printf("\n

");printf(

"你想找最大的前面幾個數:");

scanf("%d

",&n);

choose_max_n(a,

0, an - 1

, n);

return0;

}void choose_max_n(int a, int startindex, int endindex, int

n)int choose_nth(int a, int startindex, int endindex, int

n)

for(; i < j; i++)

if(a[i] >midone)

}a[i] =midone;

int th = endindex - i + 1

;

if(th ==n)

else

else}}

}

結果:

陣列是:14

11132

451000

99300822

189你想找最大的前面幾個數:

5最大的前n個數是:

99111

3001000

189

陣列 找出陣列的第k大的數

找出陣列的第k大的數 6,7,8,9,3,2,4,8 第3大的數是4 class solution def call self,nums,k if nums none or len nums 0 return 1 result self.qsort nums,0,len nums 1,k retur...

陣列中前k大的數

問題 程式設計之美 page139.尋找最大的k個數。方法一 通過全排序 快速排序 然後獲取前k個數即位最大的k個數。演算法複雜度 o nlogn 方法二 通過部分排序。選擇排序,氣泡排序 直接獲取前k個最大的數。演算法複雜度o n k 當k比較小的時候可以考慮 方法三 快速排序的變種。前面尋找陣列...

用SQL找出前N名

業務系統中常常會有排名的需求,考試和比賽中則更普遍了。excel 中也有個 rank 函式供排名之用,資料庫中更不例外了。如果須要找出工資最高的前三個員工工資 及其員工號 只是。前三名 的詳細含義須要準確的定義。不然查出來的可能不是想要的結果。首先。由於表中記錄數可能就少於三,查出來的記錄可能等於三...