首页 青云排行榜 知识中心 控制台

下面的代码应该找出数组{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、没有考虑数组长度为奇数的情况
关于我们
公司简介
联系我们
联系我们
售前咨询: leizhongnan@eval100.com
售后服务: 0755-26415932
商务合作: support@eval100.com
友情链接
金蝶软件
快递100
关注我们
Copyright © 2023-2023 深圳慧题科技有限公司 粤ICP备2023109746号-1 粤公网安备44030002001082