您的位置:首页 > 其它

算法实践篇-基于快速排序原理的选择第i小元选择算法

2014-03-18 14:51 169 查看
package com.sort;

import java.util.Random;

public class RandomSelect {
public static int randomSelect(int [] data,int p,int r,int i){
if(p==r){
return data[p];
}
int q=partition(data,p,r);
int k=q-p+1;
if(i==k){
return data[q];
}else if(i<k){
return randomSelect(data,p,q-1,i);
}else{
return randomSelect(data,q+1,r,i-k);
}
}
private static int partition(int []data ,int p,int r){
int random=new Random().nextInt(r-p)+p;
int tmpR=data[random];
data[random]=data[r];
data[r]=tmpR;

int x=data[r];
int i=p-1;
for(int j=p;j<=r-1;j++){
if(data[j]<=x){
i=i+1;
int tmp=data[i];
data[i]=data[j];
data[j]=tmp;
}
}
int tmp=data[i+1];
data[i+1]=data[r];
data[r]=tmp;
return i+1;
}

public static void main(String[] args) {
int [] data=new int[]{1,8,3,7,5,4,2,9};
for(int i=0;i<data.length;i++){
System.out.print(data[i]+" ");
}
System.out.println();
int select=randomSelect(data,0,data.length-1,4);
System.out.println(select);

}

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