C 二进制搜索-如果我添加或删除“;1“;从列表的中间,我是得到中间那个左边的第一个数字还是一个数值?
我的怀疑发生在while循环中。当我将“1”添加到列表的最小值和最大值时,我在做什么?我是移动到列表上数字的左/右,还是以数字形式更改值?谢谢C 二进制搜索-如果我添加或删除“;1“;从列表的中间,我是得到中间那个左边的第一个数字还是一个数值?,c,C,我的怀疑发生在while循环中。当我将“1”添加到列表的最小值和最大值时,我在做什么?我是移动到列表上数字的左/右,还是以数字形式更改值?谢谢 bool search(int value, int values[], int n) { if (n < 0) { return false; } // beginning and final portions int min = 0; int max = n - 1; // m
bool search(int value, int values[], int n) {
if (n < 0) {
return false;
}
// beginning and final portions
int min = 0;
int max = n - 1;
// middle variable
int mid = n / 2;
// this massive number will be useful to guarantee that the search function
// can handle incredibly large arrays
const int MAX = 65536;
while (n > 0) {
if (value > value[middle]) {
min = middle + 1;
} else
if (value < value[middle]) {
max = middle - 1;
} else
if (value == value[middle]) {
return true;
}
}
}
bool搜索(int值,int值[],int n){
if(n<0){
返回false;
}
//开头和结尾部分
int min=0;
int max=n-1;
//中间变量
int-mid=n/2;
//这个庞大的数字将有助于保证搜索功能
//可以处理非常大的阵列
常数int MAX=65536;
而(n>0){
如果(值>值[中间]){
最小=中间+1;
}否则
如果(值<值[中间]){
最大值=中间值-1;
}否则
如果(值==值[中间]){
返回true;
}
}
}
让我们假设您的值数组是这样的:1 2 5 6 9所以min=1,max=9,mid=5;现在假设您的值为7,那么如果(value>value[middle]){min=middle+1;}
此块将处于活动状态
现在我们确定我们的值大于中间值,所以我们可以将最小值增加到值数组的第(中间+1)个索引
当它更小时,同样适用。所以实际上是移动值数组的最小/最大索引。希望对您有所帮助您的功能在许多方面都被破坏了:
- 它不实现二进制搜索
并不庞大,甚至不在任何地方使用MAX
未定义,在循环中未修改middle
可能应该是value>value[middle]
value>values[middle]
bool搜索(int值,int值[],大小){
大小\u t pos=0;
尺寸限制=n;
while(pos>1);
if(值[中间]<值)
pos=中间+1;
其他的
极限=中间;
}
返回pos
我怀疑它是否能编译value[middle]
应该抱怨:数组名为values
。回答您的问题:向数组索引添加数字会移动索引。但是,我认为您的循环是无限的。赋值运算符(=
)修改其左侧操作数的值,在本例中为max
或min
。这些不是值
数组的元素,而是特定有效值的索引。这可能是一个愚蠢的问题,但我如何知道min和max是数组的索引而不是简单变量@Elyasin@JohnBollinger如果你也能帮忙,谢谢你们两个@gcampeao您在代码中这样说://开始和结束部分
-索引是一个简单的整数类型变量。老实说,我建议你试着通过做一个教程或者阅读一本关于C编程语言的书来学习。
bool search(int value, int values[], size_t n) {
size_t pos = 0;
size_t limit = n;
while (pos < limit) {
size_t middle = pos + ((limit - pos) >> 1);
if (values[middle] < value)
pos = middle + 1;
else
limit = middle;
}
return pos < n && values[pos] == value;
}