常見演算法之尋找K大數

2021-10-03 19:24:44 字數 627 閱讀 1780

2017-12-13

有很多個無序的數,怎麼選出其中最大的若干個數?即,從n個數中選出最大的k個數。元素數量不多的情況下,使用對應的排序演算法來對資料進行排序,再輸出最大的前k個數。

兩種排序(部分排序,全部排序)

全部排序:( 時間複雜度均為o(nlog2n) )

快速排序:

堆排序:

存在的問題:

部分排序:把n個數中的前k個數排序出來,複雜度是o(n*k)。

選擇排序:

氣泡排序:

結論:利用快速排序的思想

快排回顧:

解決方案:

結論:

前兩個解法都存在統一的問題,需要對資料訪問多次,只能適用於資料量較小的情況。若資料量較大,則不能全部裝入記憶體,所以要求盡可能少地遍歷資料。

步驟概括:所耗費的時間複雜度為o(n * k)。

對於尋找最小值以及替換的問題

堆排序實現:

後續會用相關**實現。敬請期待! ????

演算法事務和鎖

redis資料型別

elvis

the easy way or the right way.

分治演算法 尋找第k大數

問題描述 給定線性序集中n個元素和乙個整數k,1 k n,要求找出這n個元素中第k大的元素,這裡給定的線性集是無序的 其實這個問題很簡單,直接對線性序列集qsort,再找出第k個即可。但是這樣的時間複雜度就是qsort的時間複雜度o nlogn 有沒有更快的方法呢?看到網上有一種解法是採取了快排的思...

分治演算法 尋找第k大數

問題描述 給定線性序集中n個元素和乙個整數k,1 k n,要求找出這n個元素中第k大的元素,這裡給定的線性集是無序的 其實這個問題很簡單,直接對線性序列集qsort,再找出第k個即可。但是這樣的時間複雜度就是qsort的時間複雜度o nlogn 有沒有更快的方法呢?看到網上有一種解法是採取了快排的思...

分治演算法 尋找第k大數

問題描述 給定線性序集中n個元素和乙個整數k,1 k n,要求找出這n個元素中第k大的元素,這裡給定的線性集是無序的 其實這個問題很簡單,直接對線性序列集qsort,再找出第k個即可。但是這樣的時間複雜度就是qsort的時間複雜度o nlogn 有沒有更快的方法呢?看到網上有一種解法是採取了快排的思...