方法:
k之前的先排序,最大值给k。
之后的逐个比较,大于k直接覆盖,否则k不变。
代码:
package com.Edward.suanfa; import java.util.Random; class getmax{ int getmax_(int a[],int k){//数组a[],k为指定最大值 int max=a[0]; int temp; int len=a.length-1; for(int i=0;i<=k;i++){ if(max>a[i]){ temp=a[i]; a[i]=max; max=a[i]; } } for(;k<len;len--){ if(a[len]>a[k]){ a[k]=a[len]; } } return a[k]; } } public class k_max { public static void main(String[] args) { // TODO Auto-generated method stub long begin = System.currentTimeMillis(); // 这段代码放在程序执行前 getmax a=new getmax(); int N=1000000; int []b=new int[N]; for(int i=0;i<N;i++){ b[i]=(int) (Math.random()*1000); } int k=N/2; System.out.println("在第"+k+"个位置上最大值为:"+a.getmax_(b, k)); long end = System.currentTimeMillis() - begin; // 这段代码放在程序执行后 System.out.println("耗时:" + end + "毫秒"); } }
结果:
原文地址:http://edwardlj.blog.51cto.com/12133317/1859935