如果用冒泡排序对数值排序,那么算法的效率比较低。一开始我考虑的先求出数组的最大值和数组的最小值,然后再循环数组,求出数组的第二大的值,这个算法的时间复杂度是O(n)。
private static void secondArray(){
int [] aa = new int[]{66,55,33,44,77,66};
int bb = aa[0];//最大值
int cc = aa[0];//最小值
for (int i = 0; i < aa.length; i++) {
if(aa[i] > bb){
bb = aa[i];
}
if(cc > aa[i]){
cc = aa[i];
}
}
System.out.println(bb);
System.out.println(cc);
for (int i = 0; i < aa.length; i++) {
if(aa[i] != bb && cc < aa[i]){
cc = aa[i];
}
}
System.out.println(cc);
}
上面这个算法的时间复杂度虽然是O(n),但是循环了两次,现在考虑只循环一次来求数组的第二大值。
private static void secondArray1(){
int[] aa = new int[]{66,55,33,44,77,66};
int bb = aa[0];//最大值
int cc = Integer.MIN_VALUE;//第二大值
for (int i = 0; i < aa.length; i++) {
if (bb < aa[i]){
cc = bb;
bb = aa[i];
}else if(cc < aa[i] && aa[i]< bb){
cc = aa[i];
}
}
System.out.println(cc);
}