算法分析的作业题 急啊~~ 给定数组a[0:n-1],试设计一个算法,在最坏情况下用n+[logn]-2次比较找出a[0:n-1] 中的元素的最大值和次大值.后天交 急求啊 用什么语言都行 这门课没怎么听(悲剧)在线等。。谢谢了 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 public class NumCom{ public static void main (String[] args) { int[] num={4,5,6,3,2,67,34,23,32,120,45}; int n1=-9999999,n2=-999999; for(int i=0;i<num.length;i++){ if(n1<num[i]){ n2=n1; n1=num[i]; } else if(n2<num[i]){ n2=num[i]; } } System.out.println ("maxNum="+n1); System.out.println ("secNum="+n2); } } 貌似在最坏情况下用n+[logn]-2次比较找出还达不到....期待高手... 如果忽略元素的移动,可以用堆排序的原理,建一个大顶堆,建堆过程中,不用调整子堆。最大元素就是堆顶,次大元素就是堆顶的两个孩子中的最大者。元素比较次数:n次。算法如下:import java.util.*;public class MaxNextMax{ public static void main(String[] args){ int n=40; //元素个数 int[] a=new int[n+1]; //a[0]不用。 int max,nextMax; Random r=new Random(); for(int i=1;i<=n;i++){ a[i]=r.nextInt(300); //产生0~300这间的随机数 System.out.print(" "+a[i]); } System.out.println(""); int start=n/2; int temp; if(n%2==0){ if(a[start]<a[start*2]){ temp=a[start]; a[start]=a[start*2]; a[start*2-1]=temp; } start--; } for(int i=start;i>0;i--){ if(a[i]<a[2*i]){ temp=a[2*i]; a[2*i]=a[i]; a[i]=temp; } if(a[i]<a[2*i+1]){ temp=a[2*i+1]; a[2*i+1]=a[i]; a[i]=temp; } } max=a[1]; if(a[2]>a[3]){ nextMax=a[2]; }else{ nextMax=a[3]; } System.out.println("Max: "+max+"\nnext Max: "+nextMax); }} 哥们帮帮忙,关于中英文符号不变的问题! 谁有javaIO流总结的所有知识呀,就是总结出一个word文档,谁有呀 怎么在JTextArea中在不同的时间输出不同的内容 请教全角波浪线的问题 关于表格的问题,请教!!!!! 请教高手一个scoket的小问题,满分送 求救:关于Windows环境下桌面程序设计的问题 当鼠标置于按钮上时如何改变鼠标形状,比如由常规形状变为hand形状? 如何把这个目录以及该目录下的文件复制到另一个目录中!! 如何在java 中判断一行的结束 关于中间有空行的文件的读取 myeclipse中启动comcat6.0出问题
public static void main (String[] args) {
int[] num={4,5,6,3,2,67,34,23,32,120,45};
int n1=-9999999,n2=-999999;
for(int i=0;i<num.length;i++){
if(n1<num[i]){
n2=n1;
n1=num[i];
}
else if(n2<num[i]){
n2=num[i];
}
}
System.out.println ("maxNum="+n1);
System.out.println ("secNum="+n2);
}
}
期待高手...
最大元素就是堆顶,次大元素就是堆顶的两个孩子中的最大者。
元素比较次数:n次。算法如下:
import java.util.*;public class MaxNextMax{
public static void main(String[] args){
int n=40; //元素个数
int[] a=new int[n+1]; //a[0]不用。
int max,nextMax;
Random r=new Random();
for(int i=1;i<=n;i++){
a[i]=r.nextInt(300); //产生0~300这间的随机数
System.out.print(" "+a[i]);
}
System.out.println("");
int start=n/2;
int temp;
if(n%2==0){
if(a[start]<a[start*2]){
temp=a[start];
a[start]=a[start*2];
a[start*2-1]=temp;
}
start--;
}
for(int i=start;i>0;i--){
if(a[i]<a[2*i]){
temp=a[2*i];
a[2*i]=a[i];
a[i]=temp;
}
if(a[i]<a[2*i+1]){
temp=a[2*i+1];
a[2*i+1]=a[i];
a[i]=temp;
}
}
max=a[1];
if(a[2]>a[3]){
nextMax=a[2];
}else{
nextMax=a[3];
}
System.out.println("Max: "+max+"\nnext Max: "+nextMax);
}
}