C 二进制搜索算法

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

我已经实现了二进制搜索,代码如下,但我想编辑代码,以便它也打印算法的历史记录

对于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(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;
}