在线编译器 C

#include <stdio.h> void swap_min_max(int *a, int n) { int min_idx = 0; int max_idx = 0; for (int i = 1; i < n; i++) { if (a[i] < a[min_idx]) { min_idx = i; } if (a[i] > a[max_idx]) { max_idx = i; } } int t = a[min_idx]; a[min_idx] = a[max_idx]; a[max_idx] = t; }
这段代码定义了一个函数 `swap_min_max`,它的作用是在一个整数数组中找到最小元素和最大元素的位置,然后交换这两个元素的值。它遍历数组一次,同时记录最小值和最大值的下标,最后通过临时变量 `t` 完成交换。

- 你的代码逻辑是正确的,但有一个潜在问题:如果数组中有多个相同的最小值或最大值,这个函数只会交换找到的第一个最小值和第一个最大值。这通常符合预期,但需要注意。
- 另外,如果数组长度 `n` 为 0 或负数,函数会出错,因为循环条件 `i < n` 可能不成立或导致未定义行为。你可以考虑在函数开头检查 `n` 是否大于 0。