c - 二分搜索算法
问题描述
我已经实现了二进制搜索,代码如下,但我想编辑代码以便它也打印算法的历史
例如:初始数组: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;
}
解决方案
好吧,即使我不清楚这个问题是什么意思history of algorithm,但我假设您想打印您的算法未能获得密钥的次数(次数)。
如果我猜对了,你可以使用一个额外的变量来保存数字,你的算法会错过命中(或键)。
#include <stdio.h>
int search(int array[], int x, int low, int high, int failed);
int main(void)
{
int array[] = {1, 1, 2, 4, 4, 5};
int n = sizeof(array) / sizeof(array[0]);
int x = 5;
int failed = 0;
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, failed);
(result == -1) ? printf("No targets\n") : printf("Element found at index %d\n", result);
}
int search(int array[], int x, int low, int high, int failed)
{
if (high >= low)
{
int mid = low + (high - low) / 2;
if (array[mid] == x)
{
return mid;
}else{
// number of times you, failed to hit the key (item to be searched)
failed += 1;
printf("%i(%i) ", failed, array[mid]);
}
if (array[mid] > x)
return search(array, x, low, high - 1, failed);
else
return search(array, x, low + 1, high, failed);
}
return -1;
}
推荐阅读
- powershell - 如何处理带有空格的目录?
- python - 用于在特定位置添加字符的正则表达式
- python - 网页抓取问题。我正在使用美丽的汤和蟒蛇
- ajax - 如何在 Django 中进行 ajax 调用后显示更新日期
- html - 条件 css - 悬停 - 溢出
- python - 模拟时存储正确值的问题
- nginx - 通过 Unix 域套接字连接 Nginx 和 Varnish 6 不起作用
- javascript - Vuex 模块中的两个级别
- angular - 从模式弹出窗口执行 router.navigate 时,this.router.navigate 不是函数错误
- elasticsearch - 在 Elasticsearch 中添加子聚合