package liner_sort;
public class SelectTopK {
public static int select(int A[],int p,int r,int i)
{
if (p==r) {
return A[p];
}
int q=partition(A, p, r);
int k=q-p+1;
if (i==k) {
return A[q];
}else if (i<k) {
return select(A, p, q-1, i);
}else {
return select(A, q+1, r, i-k);
}
}
public static int partition(int A[],int p,int r)//快速排序中的划分
{
int x=A[r];
int i=p-1;
int tmp=0;
for (int j = p; j < r; j++) {
if (A[j]<=x) {
i=i+1;
tmp=A[i];
A[i]=A[j];
A[j]=tmp;
}
}
tmp=A[i+1];
A[i+1]=A[r];
A[r]=tmp;
return i+1;
}
public static int[] randomArray(int n)//产生随机数组
{
int A[]=new int[n];
for (int i = 0; i < n; i++) {
A[i]=(int) (Math.random()*10000);
}
return A;
}
public static void main(String[] args) {
int A[]=randomArray(5000);
System.out.println(select(A, 0, A.length-1, 4999));
}
}
顺序统计之选择第i小的数
最新推荐文章于 2021-05-18 04:42:55 发布