我在嘗試使用分而治之的算法時遇到問題。分而治之 - 未分類數組的k元素
鑑於未排序陣列Ťv []發現DE v [k]的該數組的元件如同陣列排序但不排數組v。
例如,如果K = 3和V = {2,-1,-6,7,4}該數組的第k元素爲。
由於我不能編輯傳遞的數組,我想不出另一種方式來排序數組而不保存在另一個局部變量上,或者嘗試像快速排序一樣分割數組,並返回最後一個元素的位置v應該是。
如果有幫助,這是我的代碼:
public static <T extends Comparable<? super T>> T kesimoRec(T v[], int izq, int der, int k) {
if(izq < der){
int inf = izq-1;
T pivote = v[der];
for(int i = izq; i < der; ++i){
if(pivote.compareTo(v[i]) >= 0){
++inf;
}
}
++inf;
if(inf > izq + k-1){
return (kesimoRec(v, izq, inf-1, k));
}else if(inf < izq + k-1){
return (kesimoRec(v, inf+1, der, k-inf+izq-1));
}else{
return v[inf];
}
}else{
return v[der];
}
}
是不是這個[quickselect(https://en.wikipedia.org/wiki/Quickselect)? –
@MikeSamuel - 我感覺大多數快速選擇實現都是部分排序的。 – rcgldr
@rcgldr,是的,我認爲輸入已被修改。如果數組不是共享btw線程,你可能可以調整快速選擇在找到元素後保持不變。 –