交换数组中最大和最后一个元素

Swap largest and last elements in array

我正在尝试将数组中的最大元素与数组中的最后一个元素交换。

到目前为止,我已经能够将最大的元素放入最后一个元素槽中,但无法将最后一个元素交换到最大的元素槽中。

int largest = arr[0];
for (int i = 0; i < arr.length; i++) {
    if (arr[i] > largest) {
        largest = arr[i];

        //swap largest with last
        temp = largest;
        int last = arr.length;
        arr[last - 1] = largest;
        temp = arr[last - 1];
    }
}

我建议您将代码分解成单独的函数,这些函数可以独立测试并且很可能还有其他用途。例如...

void swap(int ar[], int i, int j) {
    int t = ar[i];
    ar[i] = ar[j];
    ar[j] = t;
}

int findMaxIndex(int ar[]) {
    int maxIndex = 0;
    for(int i = 1; i < ar.length; i++) {    
        if (ar[i] > ar[maxIndex])  maxIndex = i; 
    }
    return maxIndex;
}

...
int arr[] ...
int maxIndex = findMaxIndex(arr);
swap(arr,maxIndex,length(arr)-1);

请注意,为了保持代码简洁,没有错误处理。这也将修复您的逻辑中不太微妙的错误。例如,如果从数组

开始
1,2,3,4

你最终会得到

1,4,2,3