用C语言编写输入一段序列,找出序列中第i小的数。第一行输入一个整数n(0<n<10000000)和一个整数i(1<=i<=n)。 第二行输入n个整数。 输出第i小的整数。
时间: 2024-03-11 13:50:15 浏览: 60
C语言输入一个整数序列并计算他们的值.rar_C语言输入一个整数序列并计算他们的值_输入序列C语言
5星 · 资源好评率100%
好的,这是一道经典的算法问题,可以使用快速选择算法来解决。以下是示例代码:
```c
#include <stdio.h>
#define SWAP(a, b) { int t = (a); (a) = (b); (b) = t; }
// 快速选择算法
int quick_select(int arr[], int left, int right, int k) {
if (left == right) {
return arr[left];
}
int pivot = arr[(left + right) / 2];
int i = left - 1;
int j = right + 1;
while (1) {
do {
i++;
} while (arr[i] < pivot);
do {
j--;
} while (arr[j] > pivot);
if (i >= j) {
break;
}
SWAP(arr[i], arr[j]);
}
int num_left = j - left + 1;
if (k <= num_left) {
return quick_select(arr, left, j, k);
} else {
return quick_select(arr, j + 1, right, k - num_left);
}
}
int main() {
int n, i;
scanf("%d %d", &n, &i);
int arr[n];
for (int j = 0; j < n; j++) {
scanf("%d", &arr[j]);
}
printf("%d\n", quick_select(arr, 0, n - 1, i));
return 0;
}
```
在这个程序中,我们使用了快速选择算法来找到第i小的数。快速选择算法是快速排序算法的变种,它的基本思想是,每次选取一个枢轴元素,将序列中小于枢轴元素的元素放到左边,大于枢轴元素的元素放到右边,然后判断第i小的数在左边还是右边,递归地在左边或右边继续查找,直到找到第i小的数为止。
阅读全文