我們可利用快排分區的思想解決這個問題:
- 我們選擇數組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