C语言,数组 求n个元素中最小的m个数之和
时间: 2024-12-24 18:22:46 浏览: 3
在C语言中,求一个数组中n个元素中最小的m个数之和,通常可以使用优先队列(堆数据结构)或者快速选择算法(一种改进版的快速排序)。这里我们介绍一种简单的方法,即使用“分治”思想结合冒泡排序。
首先,对整个数组进行一次排序,使得最小的m个数位于数组的前m个位置。然后,只需将这m个数相加即可得到结果。以下是伪代码的示例:
```c
#include <stdio.h>
void bubble_sort(int arr[], int n) {
for (int i = 0; i < n - 1; ++i)
for (int j = 0; j < n - 1 - i; ++j)
if (arr[j] > arr[j + 1]) {
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
int sum_of_smallest_m(int arr[], int n, int m) {
bubble_sort(arr, n);
int result = 0;
for (int i = 0; i < m; ++i)
result += arr[i];
return result;
}
int main() {
int arr[] = {5, 2, 9, 1, 7, 4};
int n = sizeof(arr) / sizeof(arr[0]);
int m = 3; // 求最小的3个数之和
printf("Sum of smallest %d numbers: %d\n", m, sum_of_smallest_m(arr, n, m));
return 0;
}
```
在这个例子中,`bubble_sort`函数用于排序数组,`sum_of_smallest_m`函数负责计算最小m个数的和。请注意,这种方法的时间复杂度是O(n^2),对于大规模数据可能会效率不高。实际应用中,如果性能要求较高,可以考虑使用更高效的排序算法如快速排序或堆排序,它们的时间复杂度更低。
阅读全文