二进制搜索不返回数组中的最后一个值

时间:2017-07-12 03:22:35

标签: 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;
        }
    }
}
}

1 个答案:

答案 0 :(得分:0)

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

function isTrue(el){
  return el === true;
}

function comp(array1, array2){
  if(array1.length === 0 || array2.length === 0){
    return false;
  }
  var arr = array1.map(function(num){return num*num});
  var arr2 = [];
  for(var i = 0; i < arr.length; i++){
    if(array2.includes(arr[i])){
      arr2.push(true);
      var a = array2.indexOf(arr[i]);
     array2.splice(a,1);
    } else{
      arr2.push(false);
    }
  }
  return arr2.includes(false) ? false : true;
}

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

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