c语言用折半查找的方法在40、59、84、73、21、17、52、39、74、4、47、65、45、99、19 、97、64、67、85、22、23、83、98、69、88、3、42、60、1、94这三十个数中查找出两数之和等于100的两个数,输出冒泡排序结果,并输出这两个数和输出其在原数组的索引下标。请给出详细注释
时间: 2023-07-03 19:28:24 浏览: 14
好的,这是一个具体的编程问题。首先,我们需要使用折半查找算法在给定的数组中找到两个数的和等于100的两个数。下面是代码:
```c
#include <stdio.h>
// 折半查找
int binary_search(int arr[], int start, int end, int target) {
while (start <= end) {
int mid = (start + end) / 2;
if (arr[mid] == target) {
return mid;
} else if (arr[mid] < target) {
start = mid + 1;
} else {
end = mid - 1;
}
}
return -1;
}
int main() {
int arr[] = { 40, 59, 84, 73, 21, 17, 52, 39, 74, 4, 47, 65, 45, 99, 19, 97, 64, 67, 85, 22, 23, 83, 98, 69, 88, 3, 42, 60, 1, 94 };
int n = sizeof(arr) / sizeof(arr[0]);
// 冒泡排序
for (int i = 0; i < n - 1; i++) {
for (int j = 0; j < n - i - 1; j++) {
if (arr[j] > arr[j + 1]) {
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
// 查找两数之和为100的两个数
int i, j;
for (i = 0; i < n; i++) {
int target = 100 - arr[i];
j = binary_search(arr, i + 1, n - 1, target);
if (j != -1) {
break;
}
}
// 输出结果
printf("两数之和为100的两个数是 %d 和 %d\n", arr[i], arr[j]);
printf("%d 在数组中的下标是 %d\n", arr[i], i);
printf("%d 在数组中的下标是 %d\n", arr[j], j);
return 0;
}
```
上面的代码中,我们首先使用冒泡排序算法对数组进行排序。然后,我们使用双重循环遍历数组,对于每个数,我们计算出与它相加等于100的目标数,然后使用折半查找算法在其后面的数组元素中查找目标数。如果找到了目标数,就说明我们找到了两个数的和等于100的两个数。最后,我们输出这两个数以及它们在原数组中的下标。
相关推荐













