如何选出数组中最小的两个数并返回索引C语言
时间: 2024-10-03 20:02:18 浏览: 36
在C语言中,你可以使用双指针法来找出数组中最小的两个数及其索引。这里是一个简单的例子:
```c
#include <stdio.h>
// 函数声明
typedef struct {
int num;
int index;
} Pair;
Pair findTwoSmallest(int arr[], int n) {
Pair pairs[2]; // 创建一个包含两个元素的结构体数组
pairs[0].num = arr[0];
pairs[0].index = 0;
pairs[1].num = arr[1];
pairs[1].index = 1;
// 如果数组只有两个元素或更少,则直接返回
if (n <= 2) {
return pairs;
}
for (int i = 2; i < n; i++) {
// 检查当前元素是否小于第一个小数
if (arr[i] < pairs[0].num) {
pairs[1] = pairs[0];
pairs[0].num = arr[i];
pairs[0].index = i;
}
// 或者当前元素是否小于第二个小数但大于第一个
else if (arr[i] < pairs[1].num && arr[i] != pairs[0].num) {
pairs[1].num = arr[i];
pairs[1].index = i;
}
}
return pairs;
}
int main() {
int arr[] = {5, 2, 9, 1, 7};
int n = sizeof(arr) / sizeof(arr[0]);
Pair result = findTwoSmallest(arr, n);
printf("The two smallest numbers and their indices are: %d (at index %d) and %d (at index %d)\n",
result.num, result.index, pairs[1].num, pairs[1].index);
return 0;
}
```
这个函数首先假设前两个元素是最小的,然后遍历整个数组,如果找到比这两个数都小的元素,就更新最小值及其索引。注意,此方法只适用于非降序数组。
阅读全文