用折半查找算法,对int a[15]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15},x;输入x,查找x是否在数组中。。程序文件名为ex7_72.c。
时间: 2023-10-01 19:08:36 浏览: 72
好的,这是一个有关算法的问题,我可以回答。下面是ex7_72.c的程序代码:
```c
#include <stdio.h>
int main() {
int a[15] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15};
int x, i, left, right, mid;
printf("请输入要查找的数:");
scanf("%d", &x);
left = 0;
right = 14;
while (left <= right) {
mid = (left + right) / 2;
if (a[mid] == x) {
printf("%d 在数组中的位置是:%d\n", x, mid + 1);
return 0;
} else if (a[mid] > x) {
right = mid - 1;
} else {
left = mid + 1;
}
}
printf("%d 不在数组中。\n", x);
return 0;
}
```
你可以将这段代码复制到你的计算机中保存为ex7_72.c文件,然后使用gcc等编译器进行编译运行。
相关问题
用折半查找算法,对int a[15]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15},x;输入x,查找x是否在数组中。
好的,这是一个关于算法的问题,可以回答。使用折半查找算法,在有序的数组中查找一个数的时间复杂度为O(log n),具体步骤是:
1. 将数组按照升序排列,保证数组有序。
2. 设定左指针left为0,右指针right为数组长度减1。
3. 当left小于等于right时,执行以下操作:
a. 计算中间位置mid,即mid = (left + right) / 2;
b. 如果a[mid]等于待查找的数x,则返回mid的值即为目标位置;
c. 如果a[mid]大于x,则在左半部分继续查找,将右指针right更新为mid - 1,重复步骤3;
d. 如果a[mid]小于x,则在右半部分继续查找,将左指针left更新为mid + 1,重复步骤3;
4. 如果查找到最后,仍然没有找到目标数x,则返回-1表示查找失败。
所以,对于给定的数组int a[15]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15},如果输入一个待查找的数x,使用折半查找算法可以判断x是否在数组中。
现有数组a[8]={1,3,8,9,6,2,4,7},请使用编写折半算法查找6的位置。
以下是使用折半算法查找数组中元素位置的示例代码:
```c
#include <stdio.h>
int binarySearch(int arr[], int left, int right, int target) {
while (left <= right) {
int mid = left + (right - left) / 2;
if (arr[mid] == target) {
return mid;
}
if (arr[mid] < target) {
left = mid + 1;
} else {
right = mid - 1;
}
}
return -1;
}
int main() {
int arr[] = {1, 3, 8, 9, 6, 2, 4, 7};
int target = 6;
int size = sizeof(arr) / sizeof(arr[0]);
int position = binarySearch(arr, 0, size - 1, target);
if (position != -1) {
printf("The position of %d is %d\n", target, position);
} else {
printf("%d is not found in the array\n", target);
}
return 0;
}
```