用C语言解决问题。【问题描述】 请输入10个整数至一维数组a中,并采用冒泡排序算法将这10个数按从小到大排序;然后输入一个数至变量n,并采用二分查找法判断该数是否为数组a中的一个数,是则输入“yes”,否则输入“no”。 【样例输入】 10 9 8 7 6 5 4 3 2 1 5 【样例输出】 yes yes
时间: 2024-02-15 17:01:53 浏览: 88
实验四 一维与二维数组实验
以下是该题的C语言代码实现:
```c
#include <stdio.h>
#include <stdlib.h>
#define N 10
int a[N];
int cmp(const void *a, const void *b) {
return *(int *)a - *(int *)b;
}
int bsearch(int x, int n) {
int l = 0, r = n - 1, mid;
while (l <= r) {
mid = (l + r) / 2;
if (a[mid] == x) {
return 1;
} else if (a[mid] < x) {
l = mid + 1;
} else {
r = mid - 1;
}
}
return 0;
}
int main() {
int i, n;
// 输入数组并排序
for (i = 0; i < N; i++) {
scanf("%d", &a[i]);
}
qsort(a, N, sizeof(int), cmp);
// 输入待查找数并二分查找
scanf("%d", &n);
if (bsearch(n, N)) {
printf("yes\n");
} else {
printf("no\n");
}
return 0;
}
```
算法思路:
- 先输入10个整数至一维数组a中;
- 使用库函数qsort对数组a进行排序;
- 输入一个数至变量n,然后使用二分查找法判断该数是否在数组a中:从数组的中间元素开始查找,如果中间元素正好是要查找的数,则查找过程结束;如果某一时刻中间元素大于或小于要查找的数,则在数组的左半部分或右半部分继续查找,直到查找到该数或者确定该数不存在为止。
阅读全文