C语言代码实现求整数数组中相差最小的两个元素的差和两个元素的位置
时间: 2024-09-25 20:04:02 浏览: 37
在C语言中,你可以通过遍历整个数组并维护当前已找到的最大值、最小值以及它们的下标,来寻找相差最小的两个元素及其差。以下是简单的示例代码:
```c
#include <stdio.h>
// 函数声明
void findMinDifference(int arr[], int n, int *min_diff, int *index1, int *index2);
int main() {
int arr[] = {5, 3, 9, 7, 1, 8};
int n = sizeof(arr) / sizeof(arr[0]);
int min_diff, index1, index2;
// 调用函数
findMinDifference(arr, n, &min_diff, &index1, &index2);
printf("The difference between the two smallest numbers is: %d\n", min_diff);
printf("Their indices are: index1 = %d, index2 = %d\n", index1, index2);
return 0;
}
// 函数实现
void findMinDifference(int arr[], int n, int *min_diff, int *index1, int *index2) {
if (n < 2) {
// 如果数组长度小于2,无法找到两个元素
*min_diff = -1; // 或者设置为一个非零初始值表示错误情况
return;
}
int max_val = arr[0], min_val = arr[0];
*index1 = 0;
*index2 = 0;
for (int i = 1; i < n; ++i) {
if (arr[i] < min_val) {
min_val = arr[i];
*index2 = i;
} else if (arr[i] > max_val && arr[i] - min_val < *min_diff) {
*min_diff = arr[i] - min_val;
*index1 = i;
}
}
}
```
这个程序首先检查数组是否有足够的元素。然后,它初始化最大值和最小值为数组的第一个元素,并记录其下标。接着,遍历数组,更新最小值、最大值以及它们的下标。当发现一个新的更小值或更大的值与当前最小差距更小时,就更新`min_diff`和相应的索引。
阅读全文