package test20190124;
public class test5 {
/**
* 从x个数中找出最大的y个
* @param args
*/
public static void main(String[] args) {
int randomNum = 100000000;//100000000个随机数
int maxNum = 100;//100个最大数
int[] allNum = new int[randomNum];
//随机生成
for(int i=0;i<randomNum;i++){
Double b =(Math.random() * randomNum);
allNum[i] = b.intValue();//随机数:测试结果约0.3秒
// allNum[i] = i;//从小到大排列:测试结果约13秒
// allNum[i] = randomNum - i;//从大到小排列:测试结果约0.2秒
}
long begin = System.currentTimeMillis();
//临时存放最大值数组
int[] maxArr = new int[maxNum];
for(int i=0;i<maxNum;i++){
maxArr[i] = allNum[i];
}
//初始化将前maxNum个数据放进数组,将最小的数放在第一个
findMinPutFirst(maxArr);
//查找剩余的数进行比较
for(int i= maxNum;i<randomNum;i++){
int num = allNum[i];
if(num < maxArr[0]){
continue;
}
maxArr[0] = num;
findMinPutFirst(maxArr);
}
long end = System.currentTimeMillis();
System.out.println(end - begin);
// for(int i=0;i<maxNum;i++){
// System.out.println(maxArr[i]);
// }
}
/**
* 从数组中找到最小值放在第一个
* @param allNum 待比较的数组
*/
private static void findMinPutFirst(int[] allNum){
if(allNum == null || allNum.length == 0){
return;
}
int minIndex = 0;
int minTemp = allNum[minIndex];
for(int i=0;i<allNum.length;i++){
int nowNum = allNum[i];
if(minTemp > nowNum){//循环比较找到最小值
minTemp = nowNum;
minIndex = i;
}
}
allNum[minIndex] = allNum[0];//将第一个与最小值进行对换
allNum[0] = minTemp;
}
}