首页 分享 编写一个程序解决选择问题。令k=N/2。

编写一个程序解决选择问题。令k=N/2。

来源:花匠小妙招 时间:2024-12-26 21:02

最新推荐文章于 2021-05-24 14:10:31 发布

weixin_30314793 于 2017-05-24 12:00:00 发布

import java.util.Arrays;

/**
* 选择问题,确定N个数中第K个最大值
* @author wulei
* 将前k个数读进一个数组,冒泡排序(递减),再将剩下的元素逐个读入,
* 如果新元素小于第K个元素,忽略,否则将新元素插入正确的位置,并移除原第K个元素。
*/
public class SelectTest {

//public static final Random RANDOM = new Random(3);
//3为随机数种子,当种子相同的时候,每次随机生成的数都一样。
//RANDOM.nextInt(100) 生成0到100的整数。

//冒泡
public static void sort(int[] arr){
for (int i = 0; i < arr.length-1; i++) {
for (int j = 0; j < arr.length-i-1; j++) {
if(arr[j] < arr[j+1]){
int x = arr[j];//TODO 测试new基本类型的性能,待会儿放到全局
arr[j] = arr[j+1];
arr[j+1] = x;
}
}
}
}

public static int selectK(int[] arr,int k){
int[] kArr = Arrays.copyOf(arr, k);
sort(kArr);
for (int i = k; i < arr.length; i++) {
if(arr[i] > kArr[k-1]){
kArr[k-1] = kArr[k-2];
for (int j = k-2; j >= 0; j--) {
if(kArr[j] > arr[i]){
kArr[j+1] = arr[i];//复杂问题简单化:如果新元素比a[j]小,那么在a[j]后面,大,那么占用a[j]
break; //的位置,但需要先将a[j]往后移。
}else{
kArr[j+1] = kArr[j];
kArr[j] = arr[i];
}
}
}
}
return kArr[k-1];
}

public static void main(String[] args){
int[] arr = new int[]{3,2,1,9,0,0,0,0,0,10,11,8};
long start = System.currentTimeMillis();
int ka = selectK(arr, 3);
System.out.println("time:"+(System.currentTimeMillis()-start));
System.out.println(Arrays.toString(arr));
System.out.println(ka);
}

}

转载于:https://www.cnblogs.com/1023linlin/p/6898228.html

相关知识

编写程序解决选择问题。令K=N/2;
玫瑰花数程序编写
c语言必背18个经典程序
解决易语言编程乱码的问题
为一个花店编写一个库存管理程序,花点库存的花用花的名称、颜色、单价和株的数量来表示。(可直接运行)
Z同学为了实现暑假去云南旅游的梦想,决定以后每天只消费1元,每花k元就可以再得到1元,一开始Z同学有M元,问最多可以坚持多少天。输入2个整数M, k,(2
有以下程序段,且变量已正确定义和赋值 for(s=1.0,k=1;k
玫瑰花数 一个四位数等于各位数字的四次方之和,则为玫瑰花数。如:1634=1*1*1*1+6*6*6*6+3*3*3*3+4*4*4*4
小结
【机器学习】6:K

网址: 编写一个程序解决选择问题。令k=N/2。 https://www.huajiangbk.com/newsview1312127.html

所属分类:花卉
上一篇: 有一钢板,原长l=1m,钢板弹性
下一篇: 编写一个程序解决选择问题, k

推荐分享