如何用快排在O(n)時間內查找第K的數-筆記

我們可利用快排分區的思想解決這個問題:

  • 我們選擇數組a區間的最後一個元素a[n-1]作爲pivot,此時數組可分爲三個區間:a[0]~a[p-1],a[p],a[p+1]~a[n-1]。若K=p+1,則p爲所求。
  • 若K>p+1,則按上述思路對a[p+1]~a[n-1]區間內進行求解,若K<p+1,同理。

爲什麼上述查找方式複雜度爲n呢?

  • 第一次分區查找,我們需要對大小爲n的數組進行操作,比較次數爲n
  • 第二次分區查找,需對n/2大小的數組進行操作,比較次數爲n/2
  • 依次類推,我們需要比較的次數爲n,n/2,n/4,n/8…1。這是一個等比數列,加起來結果爲2n-1,複雜度爲n
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章