求一維數組中最小的k個值

題目:

求一個一維數組中最小的k個數。

解答:

方法一:排序

先把數組從小到大進行排序,取前k個數。

時間複雜度爲O(nlogn)

方法二:使用堆排序

  1. 創建一個最小堆,初始化大小爲k,堆頂爲堆的最大元素;
  2. 掃描一遍數組,往最小堆插入數據,如果堆的元素個數已經達到k,那麼新元素需要和堆頂比較,如果小於堆頂,則移除堆頂,插入新元素;
  3. 最終得到k個最小元素。

時間複雜度爲O(nlogk)

方法三:使用快排分區函數

快排分區函數:選擇一個數,把數組的數分爲兩部分,把比選中的數小或者相等的數移到數組的左邊,把比選中的數大的數移動到數組的右邊,返回分區後的選中數所在的下標。

時間複雜度爲O(n)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章