求在一组N个的数中找出第K个最大数

方法一代码:

package test;

import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class ResearchMaxnum {
 
	  //冒泡法
	public ResearchMaxnum(double a[],int r){
		double t;//用来临时存储的中间变量
		for(int i=0;i<9;i++)//循环9轮
				for(int k=1;k<=9-i;k++){//一轮比较相邻的(9-i)对数
					if(a[k-1]<a[k]){//从左到右如果左边的数小于右边的
						t=a[k-1];//先把左边的赋值给中间变量
						a[k-1]=a[k];//右边的赋值给左边的
						a[k]=t;//前面左边的值又赋值给右边
					}
				}
		
		System.out.print("排序后的数组:");
		
		for(int j=0;j<=9;j++)//循环输出排序后的数组
			{
			System.out.print(a[j]);
			System.out.print("   ");
			}
		System.out.println("\n第'"+r+"'个最大的数是:'"+a[r-1]+"'");
	}
	
	
	/*//验证输入的是合法测试数据
	public static void A7(String num){
		String regex="^[0-9]+(.[0-9]{2})?$";
		Pattern p=Pattern.compile(regex);
		Matcher t=p.matcher(num);
		if(!t.matches()){
			 System.out.println("你的输入数据不合法请再次输入!");	
			 Input1();	
			}
	}
	
	
	//只能输入1位的数字:
		public static void A0(String num){//对输入的数k进行检验是否输入有误
			String regex="^/d{1}$";
			Pattern p=Pattern.compile(regex);
			Matcher t=p.matcher(num);
			if(!t.matches()){
			  System.out.println("你的输入不合法请再次输入!");	
			  Input2();
			}
		}*/
	
	public static Scanner Input(){
	Scanner sc=new Scanner(System.in);
	return sc;
	}
	
	public static int Input2(){
	int k;
	Scanner sc=Input();
    System.out.println("请输入你需要查找的第几个最大值:");
    k=sc.nextInt();
    //A0(String.valueOf(k));
    return k;
	}
	
	public static  double[]  Input1(){
		double a[]=new double[10];//存放测试数据
		Scanner sc=Input();
		int i=0;
		System.out.println("请输入10个数字经行测试");
        while(i<10){
        	a[i]=sc.nextDouble();
        	//A7(String.valueOf(a[i++]));
        }
        return a;	
	}
	
	
	public static void main(String[] args) {
		double a[]=ResearchMaxnum.Input1();
		int k=ResearchMaxnum.Input2();
        new ResearchMaxnum(a,k);	
	}


}

方法二代码:

package test;


import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;


public class ResearchMaxnum {
 


 //冒泡法
public static double[] Maopao(double b[],int r){
double t;//用来临时存储的中间变量
//把放入数组中的数进行逆序排列
for(int i=0;i<r-1;i++)//循环r-1轮
for(int k=1;k<=r-1-i;k++){//一轮比较相邻的(4-i)对数
if(b[k-1]<b[k]){//从左到右如果左边的数小于右边的
t=b[k-1];//先把左边的赋值给中间变量
b[k-1]=b[k];//右边的赋值给左边的
b[k]=t;//前面左边的值又赋值给右边
}
}
for(int i=0;i<r;i++)
{
System.out.print(b[i]);
System.out.print("\n");
}

return b;
}

public ResearchMaxnum(double a[],int r){
double[] b=new double[10];//存放始终逆序排列好的数据

for(int i1=0;i1<r;i1++)//先把前五个数放入数组b
b[i1]=a[i1];

b=Maopao(b,r);//返回逆序排列好的数组b

for(int i=r;i<=9;i++){
if(b[r-1]<a[i]){
b[r-1]=a[i];
b=Maopao(b,r);//返回逆序排列好的数组b
}
}


System.out.print("排序后的数组:");

for(int j=0;j<=r-1;j++)//循环输出排序后的数组
{
System.out.print(b[j]);
System.out.print("   ");
}
System.out.println("\n第'"+r+"'个最大的数是:'"+b[r-1]+"'");
}


/*//验证输入的是合法测试数据
public static void A7(String num){
String regex="^[0-9]+(.[0-9]{2})?$";
Pattern p=Pattern.compile(regex);
Matcher t=p.matcher(num);
if(!t.matches()){
System.out.println("你的输入数据不合法请再次输入!");
Input1();
}
}


//只能输入1位的数字:
public static void A0(String num){//对输入的数k进行检验是否输入有误
String regex="^/d{1}$";
Pattern p=Pattern.compile(regex);
Matcher t=p.matcher(num);
if(!t.matches()){
 System.out.println("你的输入不合法请再次输入!");
 Input2();
}
}*/

public static Scanner Input(){
Scanner sc=new Scanner(System.in);
return sc;
}

public static int Input2(){
int k;
Scanner sc=Input();
    System.out.println("请输入你需要查找的第几个最大值:");
    k=sc.nextInt();
    //A0(String.valueOf(k));
    return k;
}

public static  double[]  Input1(){
double a[]=new double[10];//存放输入的测试数据
Scanner sc=Input();
int i=0;
System.out.println("请输入10个数字经行测试");
        while(i<10){
        a[i++]=sc.nextDouble();
        //A7(String.valueOf(a[i++]));
        }
        return a;
}


public static void main(String[] args) {
double a[]=ResearchMaxnum.Input1();
int k=ResearchMaxnum.Input2();
        new ResearchMaxnum(a,k);
}




}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值