【发布时间】:2021-03-23 17:25:30
【问题描述】:
我已经实现了二进制搜索,代码如下,但我想编辑代码以便它还打印算法的历史记录
例如: 初始数组: 1 1 2 4 4 5 目标元素:3 搜索历史:2(2) 4(4) 没有目标
#include <stdio.h>
int search(int array[], int x, int low, int high);
int main(void)
{
int array[] = {1, 1, 2, 4, 4, 5};
int n = sizeof(array) / sizeof(array[0]);
int x = 3;
printf("Initial array:\n");
for (int i = 0; i < n; i++)
{
printf("%d ", array[i]);
}
printf("\n");
printf("Target element: %d\n", x);
int result = search(array, x, 0, n - 1);
(result == -1) ? printf("No targets\n") : printf("Element found at index %d\n", result);
}
int search(int array[], int x, int low, int high)
{
if (high >= low)
{
int mid = low + (high - low) / 2;
if (array[mid] == x)
{
return mid;
}
if (array[mid] > x)
return search(array, x, low, high - 1);
else
return search(array, x, low + 1, high);
}
return -1;
}
【问题讨论】:
-
搜索历史是指以前搜索过的元素及其状态,例如(找到和未找到)
-
而不是
if (array[mid] > x) return search(array, x, low, high - 1); else return search(array, x, low + 1, high);,我希望if (array[mid] > x) return search(array, x, low, mid - 1); else return search(array, x, mid + 1, high);所以搜索很快完成。事实上,它不是“二分搜索”,而是线性搜索。 -
算法历史是什么意思?
标签: c algorithm search data-structures