【问题标题】:Binary Search Algo二分搜索算法
【发布时间】: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] &gt; x) return search(array, x, low, high - 1); else return search(array, x, low + 1, high);,我希望if (array[mid] &gt; x) return search(array, x, low, mid - 1); else return search(array, x, mid + 1, high); 所以搜索很快完成。事实上,它不是“二分搜索”,而是线性搜索。
  • 算法历史是什么意思?

标签: c algorithm search data-structures


【解决方案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;
}

【讨论】:

    猜你喜欢
    • 2017-07-02
    • 2017-01-06
    • 2012-04-04
    • 1970-01-01
    • 2014-02-03
    • 2011-05-30
    • 1970-01-01
    相关资源
    最近更新 更多