c - 二分查找不返回数组中的最后一个值

标签 c binary-search-tree

我一直致力于在 C 中实现二分搜索函数,它似乎在所有情况下都有效,除了查找正在搜索的数组中的最后一个值。请有人好心地为我指出正确的方向。非常感谢!

我意识到这可能是一些糟糕且低效的代码(我才几天,请原谅我!)所以我将在未来考虑您的所有指导。

bool search(int value, int values[], int n)
{
int middle = (n / 2);
if (n < 0) 
{
    return false;
} 

if (n < 2 && n > 0) 
{
    if (value == values[0])
    {
        return true;
    }
    else
    {
        return false;
    }
} 

const int MAX = 65536;
int half[MAX];

if (value > values[middle])
{
    int new_size = n - middle - 1;
    for (int i = 0, m = middle + 1; i < new_size; i++, m++)
    {
        half[i] = values[m];
    }
    return search(value, half, new_size);
    }

else if (value < values[middle])
{
    int new_size = n - middle;
    for (int i = 0, m = 0; i < middle; i++, m++)
    {
       half[i] = values[m];
    }
    return search(value, half, new_size);
}

else if (value == values[middle])
{
    return true;
}
return false;
}

void sort(int values[], int n)
{
int swap;

for (int i = 0; i < n; i++)
{
    for (int j = 0; j < n; j++)
    {
        if (values[j] > values[j + 1])
        {
            swap = values[j + 1];
            values[j + 1] = values [j];
            values[j] = swap;
        }
    }
}
}

最佳答案

在您的排序函数中,可能会出现索引越界错误: 将内部 for 循环更改为:

for(j =0; j < n-1; j++)  

我的解释是,在你的排序函数中,你试图实现冒泡排序算法,它的正确实现是:

void sort(int a[], int n){
   int i,j,temp;
   for(i =0; i < n-1; i++){
     for(j =0; j < n-1-i; j++){
        if(a[j] > a[j+1]){
          temp = a[j];
          a[j] = a[j+1];
          a[j+1] = temp;
        }
     }
  }
}

关于c - 二分查找不返回数组中的最后一个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45047847/

相关文章:

c++ - 二叉搜索树删除两个 child

java - 如何将节点从二叉树插入数组?

c - BST 的插入迭代方法 (C)

c - Switch 语句中断菜单

c - 递归 BST 查找元素效果不佳

c - 多线程读取文件

algorithm - 打印二叉树的边界

c++ - 包含文件的定义

c - C 中的宏和函数冲突

C malloc 指向 NULL 的指针不起作用