package sdu.ocean;
public class findK {
public static void main(String[] args) {
int a[] = { 0, 10, 4, 1, 6, 4, 8, 9, 5, 23, 12, 65, 43 };
int b[] = new int[13]; //用于存放结果
new findK().findKth(a, b, 5, 1, 12);
System.out.println("第5小的元素为:" + b[1]);
}
public int partition(int a[], int f, int r) {
int point = f;
int i = f + 1;
int j = r;
int p = a[point];
while (true) {
while (i < 13 && a[i] < p) {
i++;
}
while (j > 0 && a[j] > p) {
j--;
}
if (j <= i) {
break;
} else {
int x = a[j];
a[j] = a[i];
a[i] = x;
}
}
a[point] = a[j];
a[j] = p;
return j;
}
public void findKth(int a[], int b[], int k, int f, int r) {
if (f < r) {
int p = partition(a, f, r);
System.out.println("p " + p);
if (p == k) {
b[1] = a[p];
} else {
if (p < k) {
findKth(a, b, k, p + 1, r);
} else {
findKth(a, b, k, f, p - 1);
}
}
}
}
}
分治法 寻找第K小元素
最新推荐文章于 2021-12-31 10:31:27 发布