解决选择问题

版权声明:使用注明出处 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+"毫秒");
	}
}


猜你喜欢

转载自blog.csdn.net/chunfenxiaotaohua/article/details/83064800