交换数组中最大和最后一个元素
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
我正在尝试将数组中的最大元素与数组中的最后一个元素交换。
到目前为止,我已经能够将最大的元素放入最后一个元素槽中,但无法将最后一个元素交换到最大的元素槽中。
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