求陣列中第n大(小)的元素

2021-08-07 15:11:39 字數 963 閱讀 9337

使用快速排序進行查詢,類似於二分查詢的意思,因為每次都會有乙個元素找到適當位置,該位置就是這個元素在陣列中的排列順序。每次partition會返回乙個陣列下標,將該陣列下標的元素和待查詢的值進行比較,如果相等,直接返回,如果大於,取partition操作後的右一側,反之,取左一側。
利用快速排序進行查詢,類似與二分查詢思想,其運算元為

n+n/2+n/4+.....,由此可見,其時間複雜度為o(n)

3 實現

/**

* 求陣列中第k小的元素

* 快速排序

* 時間複雜度為o(n)

*@author xld

* */

public

class

selection

public

static

intsolve(int arr, int l, int r, int k)

public

static

intpartition(int arr, int l, int r)

}swap(arr, l, j);

return j;

}private

static

void

swap(int arr, int i, int j)

// 測試insertionsort

public

static

void

main(string args) ;

int ret = selection.solve(arr, 3);

for (int i = 0; i < arr.length; i++)

system.out.println();

system.out.println("第k小的元素為:"+ret);

}}

快速排序的衍生問題之求陣列中第n大元素

還不了解快速排序的柚子,請參考我的這篇部落格 聊聊時間複雜度為o nlogn 的快速排序 下 快速排序求陣列中第n大的元素 尋找arr陣列中第k小的元素,k從1開始索引,即最小元素是第1小元素,以此類推 template typename t t findn t arr,int n,int key ...

尋找陣列中第n大的元素

給定乙個陣列,找出該陣列中第n大的元素的值。其中,1 n length。例如,給定乙個陣列a 當n 1時,返回9。我拿到這個問題的地中思路就是先排序,然後通過位置索引相應的第n大的元素。我使用的是o nlog n 級別的排序演算法,所以這種方法的時間複雜度應該也是o nlog n 級別的。那這個問題...

最壞情況O N 求陣列中第K 大的元素。

求陣列中第k的元素的一般方法就是使用快速排序的劃分,partion seq,start,end p,如果p k 則ok。如果p k 則在start,p 1的區間裡找第k大的數,partion seq,start,p 1 否則partion seq,p 1,end 演算法的平均時間複雜度為o n 最壞...