我一直致力于在 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;
}
}
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句