下面的代码应该找出数组{6,15,2,5,8,14,10,16,11,17,13,7,1,18,3,4,9,12}的最大值。如果可以的话,如何对代码进行实质性改进?( )
public static int maxOfArray(int[] a) {
int length = a.length;
if(length<1)
throw new NoSuchElementException("Not at least one integer in array");
while (length > 1) {
int k = length;
for(int i = 0; i < length/2; i++) {
k--;
if(a[i] > a[k]) {
int j = a[i];
a[i] = a[k];
a[k] = j;
}
}
length /= 2;
}
return a[0];
}将:length /= 2
改为:length = (int) Math.ceil((double)length / 2)
将: for(int i = 0; i < length/2; i++) {
改为:for (int i = 0; i < Math.ceil((double)length / 2); i++) {
这段代码没有任何错误,不能做任何实质性的改进。
将 if (a[i]>a[k]) 改为 if (a[i]<a[k]))
这是折半法排序的一个实现,存在两个问题:
1、因为返回的是a[0],所以大数要左移而不是右移
2、没有考虑数组长度为奇数的情况
1、因为返回的是a[0],所以大数要左移而不是右移
2、没有考虑数组长度为奇数的情况