查找数组中最大整数的算法

Sti*_*Sti 3 java arrays algorithm integer

我正在尝试创建一个返回int的方法 - 发送数组中最大整数的值.我希望这个方法工作的方法是在for循环中检查数组的第一个最后一个元素,并以中间方式工作.所以i =第一个整数,k =最后一个整数.当i = 0, k = n-1(索引)时,i = 1, k = n-2如果你抓住我的漂移.在每个循环中都需要检查if a[i]>a[k].然后他们换位置.然后我知道最大的数字在数组的前半部分,然后我希望它检查那一半,所以最终最大的int在索引0.

我试过这样的:

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];
}
Run Code Online (Sandbox Code Playgroud)

..但我真的没有得到它......我很难"想象"这里发生了什么......但它并不总是有效......(虽然有时候).

编辑 另外:阵列{6,15,2,5,8,14,10,16,11,17,13,7,1,18,3,4,9,12}; 将吐出17作为最大的数字.我意识到我必须修复奇怪的bug,但我想首先解决这个偶数长度的数组..

ami*_*mit 6

遇到的错误length是奇怪的.

在这些情况下,你"错过"中间元素.

示例:对于输入int[] arr = { 8, 1, 5, 4, 9, 4, 3, 7, 2 };- 元素9将与自身进行比较和检查,但随后减小大小length,9从下一个要迭代的数组中排除.

我相信它可以通过减少问题ceil(length/2)而不是length/2(并处理特殊情况length==1)来解决

评论中提到的另一个问题是:你需要迭代length/2而不是最多length,否则你就是压倒自己.

最后 - 标志是错误的.

if(a[i]>a[k])
Run Code Online (Sandbox Code Playgroud)

应该

if(a[i]<a[k])
Run Code Online (Sandbox Code Playgroud)

请记住 - 如果第一个元素小于第二个元素,则尝试交换元素,以便将较大的元素推送到数组的头部.