您的位置:首页 > 其它

算法:寻找第K小元素

2016-01-03 09:32 183 查看
使用从一端走的快速排序的寻找第K小元素:(注意)

1.在进行一次循环时的两种交换元素顺序①a[j]<key时②j>right时

2.何时递归,何时返回数据,左右递归的判断,递归的参数。

public class FindKth {
public static void main(String[] args) {
int A[] = {5,3,-4,-1,2,-2,-3,1};
FindK fk = new FindK();
System.out.println(fk.findKth(A, 1));
System.out.println(fk.findKth(A, 2));
System.out.println(fk.findKth(A, 3));
System.out.println(fk.findKth(A, 4));
System.out.println(fk.findKth(A, 5));
System.out.println(fk.findKth(A, 6));
System.out.println(fk.findKth(A, 7));
System.out.println(fk.findKth(A, 8));
}
}
class FindK{
int temp = 0;
public int findKth(int A[],int k){
int left = 0;
int right = A.length-1;
int key = quickFindKey(A,left,right,k);
return key;
}

private int quickFindKey(int[] a, int left, int right, int k) {
int key = a[left];
int i = left;
for(int j = left + 1;j<=right;j++){
if(a[j]<key){
i = i + 1;
temp = a[j];
a[j] = a[i];
a[i] = temp;
}
}
temp = a[i];
a[i] = key;
a[left] = temp;
if((i + 1) == k){
return a[i];
}else if((i+1)<k){
return quickFindKey(a, i+1, right, k);
}else if((i+1)>k){
return quickFindKey(a, left, i,k);
}else{
return -100;
}

}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: