C 二进制搜索算法
我已经实现了二进制搜索,代码如下,但我想编辑代码,以便它也打印算法的历史记录 对于exmaple: 初始数组: 1 1 2 4 4 5 目标要素:3 搜索历史记录:2(2)4(4) 没有目标C 二进制搜索算法,c,algorithm,search,data-structures,C,Algorithm,Search,Data Structures,我已经实现了二进制搜索,代码如下,但我想编辑代码,以便它也打印算法的历史记录 对于exmaple: 初始数组: 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(ar
#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;
}
#包括
整数搜索(整数数组[],整数x,整数低,整数高);
内部主(空)
{
int数组[]={1,1,2,4,4,5};
int n=sizeof(数组)/sizeof(数组[0]);
int x=3;
printf(“初始数组:\n”);
对于(int i=0;i=低)
{
int mid=低+(高-低)/2;
if(数组[mid]==x)
{
中途返回;
}
if(阵列[mid]>x)
返回搜索(数组,x,低,高-1);
其他的
返回搜索(数组,x,低+1,高);
}
返回-1;
}
好吧,虽然我不清楚你所说的算法历史是什么意思,但我假设你想打印你的算法无法获得密钥的次数
如果我猜对了,你可以通过使用一个额外的变量来实现,这个变量保存数字,你的算法会错过命中(或关键点)
#包括
int搜索(int数组[],int x,int低,int高,int失败);
内部主(空)
{
int数组[]={1,1,2,4,4,5};
int n=sizeof(数组)/sizeof(数组[0]);
int x=5;
int失败=0;
printf(“初始数组:\n”);
对于(int i=0;i=低)
{
int mid=低+(高-低)/2;
if(数组[mid]==x)
{
中途返回;
}否则{
//您未能按键的次数(要搜索的项目)
失败+=1;
printf(“%i(%i)”,失败,数组[mid]);
}
if(阵列[mid]>x)
返回搜索(数组,x,低,高-1,失败);
其他的
返回搜索(数组,x,低+1,高,失败);
}
返回-1;
}
search history您指的是以前搜索的元素及其状态,如(已找到和未找到),而不是if(array[mid]>x)返回搜索(array,x,low,high-1);否则返回搜索(数组,x,低+1,高)代码>,我希望if(array[mid]>x)返回搜索(array,x,low,mid-1);否则返回搜索(数组、x、中+1、高)
以便快速完成搜索。实际上,它不是一个“二进制搜索”,而是一个线性搜索。你所说的算法历史是什么意思?
#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;
}