一维数组求中值c语言实现
时间: 2023-08-17 18:35:29 浏览: 166
c语言实现 一维数组找其中最大值
一维数组求中值可以使用快速选择(Quick Select)算法,其时间复杂度为 O(n)。下面是一个简单的 C 语言实现:
```c
#include <stdio.h>
#include <stdlib.h>
int quickselect(int *arr, int n, int k)
{
int i, j, pivot, tmp;
// 选择一个枢轴元素
pivot = arr[n / 2];
// 划分数组
for (i = 0, j = n - 1;; i++, j--) {
while (arr[i] < pivot) i++;
while (arr[j] > pivot) j--;
if (i >= j) break;
tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
}
// 返回中值
if (k <= i) {
return quickselect(arr, i, k);
} else if (k < j + 1) {
return pivot;
} else {
return quickselect(arr + j + 1, n - j - 1, k - j - 1);
}
}
int main()
{
int arr[] = {1, 5, 2, 4, 3};
int n = sizeof(arr) / sizeof(int);
int m = n / 2;
int median = quickselect(arr, n, m);
printf("The median is %d.\n", median);
return 0;
}
```
这段程序使用了递归的方式进行快速选择,可以在 O(n) 的时间复杂度内求出一维数组的中值。在实际使用中,可以根据具体需求进行修改和优化。
阅读全文