方法:
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 + "毫秒"); } }
結果: