利用折半查找算法在以下数组中查找元素18。 (12,15,17,18,19,25, 32,45,51,67,75) 
时间: 2023-05-22 21:06:49 浏览: 42
我们可以在以下步骤内使用折半查找算法来查找元素18:
1. 找到数组中间位置的元素。
2. 将要查找的元素与中间元素进行比较。
3. 如果两者相等,则返回该元素的索引。
4. 如果中间元素大于要查找的元素,则在数组的左半部分继续查找。
5. 如果中间元素小于要查找的元素,则在数组的右半部分继续查找。
根据上述算法,我们可以先找到中间元素19。由于18比19小,我们可以在数组的左半部分继续查找。现在的数组为(12,15,17,18)。这个数组的中间元素是17,由于18比17大,我们可以在数组的右半部分继续查找。现在的数组为(18,19)。这个数组的中间元素是18,与要查找的元素相等,因此返回该元素的索引3。
所以,元素18在该数组中的索引为3。
相关问题
c语言用折半查找法在(05 13 19 21 37 56 64 75 80 88 92)表中査找元素21。
折半查找法,也称二分查找,是一种高效的查找算法,在有序数组中查找一个元素的时间复杂度为 O(log n)。
具体步骤如下:
1. 定义变量:left = 0,right = n-1,mid = (left + right) / 2。
2. 判断中间元素是否等于要查找的元素,如果是则返回其下标;如果不是,则继续执行下一步。
3. 如果中间元素大于要查找的元素,则在左半部分继续查找,即令 right = mid - 1;否则在右半部分查找,即令 left = mid + 1。
4. 重复步骤2和步骤3,直到找到要查找的元素或者 left > right。
按照上述步骤进行折半查找,可以得到元素21的下标为3。
具体代码如下:
```
#include <stdio.h>
int binary_search(int arr[], int n, int target) {
int left = 0, right = n-1, mid;
while (left <= right) {
mid = (left + right) / 2;
if (arr[mid] == target)
return mid;
else if (arr[mid] > target)
right = mid - 1;
else
left = mid + 1;
}
return -1;
}
int main() {
int arr[] = {5, 13, 19, 21, 37, 56, 64, 75, 80, 88, 92};
int n = sizeof(arr) / sizeof(arr[0]);
int target = 21;
int index = binary_search(arr, n, target);
if (index == -1)
printf("未找到元素%d", target);
else
printf("元素%d的下标为%d", target, index);
return 0;
}
```
有15个数按由大到小顺序存放在一个数组中,输入一个数,要求用折半查找法找出该数是数组中第几个元素的值。如果该数不在数组中,则输出“无此数”。
折半查找法,也叫二分查找法,是一种高效的查找算法。它的基本思想是将有序数组分成两部分,取中间位置的数与要查找的数进行比较,如果相等,则查找成功;如果要查找的数比中间位置的数小,则在左半部分继续查找;如果要查找的数比中间位置的数大,则在右半部分继续查找。不断重复这个过程,直到找到要查找的数或者确定该数不存在为止。
对于本题,我们可以先将给定的数组按照从大到小的顺序进行排序,然后再使用折半查找法进行查找。具体步骤如下:
1. 将给定的数组按照从大到小的顺序进行排序。
2. 输入要查找的数。
3. 定义左右两个指针,分别指向数组的第一个元素和最后一个元素。
4. 在循环中,计算中间位置的下标,然后将要查找的数与中间位置的数进行比较。
5. 如果相等,则查找成功,输出该数在数组中的位置。
6. 如果要查找的数比中间位置的数小,则在左半部分继续查找,将右指针移动到中间位置的左边一位。
7. 如果要查找的数比中间位置的数大,则在右半部分继续查找,将左指针移动到中间位置的右边一位。
8. 不断重复步骤4-7,直到找到要查找的数或者确定该数不存在为止。
9. 如果最终没有找到要查找的数,则输出“无此数”。
下面是示例代码:
```
#include <stdio.h>
int main()
{
int a[15] = {23, 19, 16, 14, 12, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1}; // 给定的数组
int n = 15; // 数组的长度
int x; // 要查找的数
int left = , right = n - 1; // 左右指针
// 对数组进行排序(从大到小)
for (int i = ; i < n - 1; i++) {
for (int j = i + 1; j < n; j++) {
if (a[i] < a[j]) {
int temp = a[i];
a[i] = a[j];
a[j] = temp;
}
}
}
// 输入要查找的数
printf("请输入要查找的数:");
scanf("%d", &x);
// 折半查找
while (left <= right) {
int mid = (left + right) / 2;
if (a[mid] == x) {
printf("%d是数组中第%d个元素的值。\n", x, mid + 1);
return ;
} else if (a[mid] > x) {
left = mid + 1;
} else {
right = mid - 1;
}
}
// 如果最终没有找到要查找的数,则输出“无此数”
printf("无此数。\n");
return ;
}
```
相关推荐










