版权声明:使用注明出处 https://blog.csdn.net/chunfenxiaotaohua/article/details/83064800
编写程序解决选择问题
编写程序解决选择问题。令K=N/2
思路
所谓选择问题,设一组N个数,而要确定其中第K个最大值。该问题的一种解决办法就是将这N个数读进一个数组,再通过某种简单的算法,以递减的顺序将数组排序,然后 返回位置K上的元素。
方法二就是将前K个元素排序,然后再将剩下的元素逐个读入,如果其小于第K个元素是就忽略,否则放入数组合适的位置,同时挤出数组中的一个元素。
package test;
import java.util.*;
public class J101401 {
public static int[] Randomarray(int i) {
int[] arr=new int[i];
//或者可以用别的方法 Random ran=new Random();参考自https://blog.csdn.net/qq_41516626/article/details/81300017
for (int j=0;j<i;j++)
{
int temp=(int)(Math.random()*100)+1;//产生一个1-100之间的整数或者可以是int a=ran.nextInt(1000);
arr[j]=temp;
}
for(int j=0;j<arr.length;j++) {
System.out.println("第一次输出");
System.out.println(arr[j]+" ");}
return arr;
}
public static void BubbleSort(int arr[] ,int k)//冒泡排序
{
int temp=0;
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])
{
temp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
}
}
}
System.out.println("排序后:");
for(int i=0;i<arr.length;i++)
{
System.out.println(arr[i]);
}
System.out.println("N=K/2=");
System.out.println(arr[k]);
}
public static void main(String[] args) {
// TODO Auto-generated method stub
long starttime=System.currentTimeMillis();
System.out.println("输入生成随机数组大小");
Scanner can=new Scanner(System.in);
int i=can.nextInt();
int k=i/2-1;
int [] arr=new int [i];
arr=Randomarray(i);
BubbleSort(arr,k);
long endtime=System.currentTimeMillis();
long time=endtime-starttime;
System.out.println("程序运行时间为"+time+"毫秒");
}
}