c语言查找数组里面的三个最小值和它们的下标
时间: 2024-11-06 12:11:43 浏览: 17
c语言利用指针求数组的最大值与最小值
在 C 语言中,查找数组里的三个最小值及其下标可以采用分而治之的策略,通常通过三个变量分别存储当前找到的最小值、次小值和第三小值,以及对应的下标。以下是简单的步骤:
1. 定义三个变量 `min`, `second_min` 和 `third_min`,初始值设置为数组的第一个元素和它的下标。
2. 遍历整个数组,从第二个元素开始,对于每个元素,如果它比 `min` 小,更新 `min` 和其下标;如果是 `second_min` 或者 `third_min` 之间的值,根据大小更新 `second_min` 或 `third_min` 和相应的下标。
3. 遍历完成后,`min`, `second_min`, 和 `third_min` 就分别是数组中的三个最小值,对应的下标则是在遍历时记录下来的。
以下是一个简单的示例函数:
```c
#include <stdio.h>
void findThreeSmallest(int arr[], int size, int* min1_idx, int* min2_idx, int* min3_idx) {
if (size <= 0 || !arr) return; // 检查输入是否有效
*min1_idx = *min2_idx = *min3_idx = 0;
int min1 = arr[0], min2 = arr[0], min3 = arr[0];
for (int i = 1; i < size; ++i) {
if (arr[i] < min1) {
min3 = min2;
min2 = min1;
min1 = arr[i];
*min1_idx = i;
} else if (arr[i] < min2 && arr[i] != min1) {
min3 = min2;
min2 = arr[i];
*min2_idx = i;
} else if (arr[i] < min3 && arr[i] != min1 && arr[i] != min2) {
min3 = arr[i];
*min3_idx = i;
}
}
}
int main() {
int arr[] = {5, 2, 9, 1, 7, 4, 6};
int min1_idx, min2_idx, min3_idx;
findThreeSmallest(arr, sizeof(arr)/sizeof(arr[0]), &min1_idx, &min2_idx, &min3_idx);
printf("Array's three smallest values are: %d, %d, %d\n", arr[min1_idx], arr[min2_idx], arr[min3_idx]);
printf("Their indices are: %d, %d, %d\n", min1_idx, min2_idx, min3_idx);
return 0;
}
```
阅读全文