我一直在用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;
}
}
}
}
答案 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++)