输入数组,最大的与第一个元素交换,最小的与最后一个元素交换,交换后输出数组
时间: 2024-10-25 21:09:40 浏览: 11
要实现这个功能,你可以使用两个指针,一个指向数组的第一个元素(最大值可能的位置),另一个指向最后一个元素(最小值可能的位置)。然后依次比较这两个元素和其他未比较过的元素,找到真正的最大值和最小值。接下来,用它们与对应的边界位置进行交换。以下是C语言的示例代码:
```c
#include <stdio.h>
void swap(int *a, int *b) {
int temp = *a;
*a = *b;
*b = temp;
}
void rearrange_array(int arr[], int n) {
int first = 0; // 指向第一个元素
int last = n - 1; // 指向最后一个元素
// 找到最大值和最小值
while (first < last) {
if (arr[first] > arr[last]) { // 如果第一个比最后一个大
swap(&arr[first], &arr[last]); // 交换
last--;
} else if (arr[first] < arr[last]) { // 如果第一个比最后一个小
first++;
} else { // 否则(相等的情况,这里可选跳过)
last--;
}
}
// 只有当整个数组只有一个元素或所有元素都相同时,才交换一次
if (arr[0] > arr[last]) {
swap(&arr[0], &arr[last]);
}
}
// 测试函数
int main() {
int arr[] = {5, 8, 1, 9, 3};
int n = sizeof(arr) / sizeof(arr[0]);
rearrange_array(arr, n);
printf("交换后的数组: ");
for (int i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
printf("\n");
return 0;
}
```
运行这段代码,它会找到并交换数组中的最大值和最小值。请注意,此代码假设数组长度至少为2,如果数组长度为1,则无需进一步操作。
阅读全文