在不使用STL的情况下为上下限找到合适的C代码很麻烦
我知道这不是一个好问题。但我尽了最大的努力,在不使用STL的情况下,为上下限找到了一些好的C代码。但是我找不到合适的。请为我提供这两个问题的正确代码,并为提出此类问题表示歉意。更新以获得回复 我希望这能奏效。其中A是排序数组,我们查找的是值K在不使用STL的情况下为上下限找到合适的C代码很麻烦,c,C,我知道这不是一个好问题。但我尽了最大的努力,在不使用STL的情况下,为上下限找到了一些好的C代码。但是我找不到合适的。请为我提供这两个问题的正确代码,并为提出此类问题表示歉意。更新以获得回复 我希望这能奏效。其中A是排序数组,我们查找的是值K int UpperBound(int A[],int N,int K){ int low , high , mid ; low = 1 ; high = N ; while(low <= high){
int UpperBound(int A[],int N,int K){
int low , high , mid ;
low = 1 ;
high = N ;
while(low <= high){
mid = ( low + high ) / 2 ; // finding middle element
if(A[mid] > K && ( mid == 1 || A[mid-1] <= K )) // checking conditions for upperbound
return mid ;
else if(A[mid] > K) // answer should be in left part
high = mid - 1 ;
else // answer should in right part if it exists
low = mid + 1 ;
}
return mid ; // this will execute when there is no element in the given array which > K
}
int LowerBound(int A[],int N,int K){
int low , high , mid ;
low = 1 ;
high = N ;
while(low <= high){
mid = ( low + high ) / 2 ; // finding middle element
if(A[mid] >= K && ( mid == 1 || A[mid-1] < K )) // checking conditions for lowerbound
return mid ;
else if(A[mid] >= K) // answer should be in left part
high = mid - 1 ;
else // answer should in right part if it exists
low = mid + 1 ;
}
return mid ; // this will execute when there is no element in the given array which >= K
}
什么??STL的上限是现在最过时的C++库。所以无论你做什么,在C语言中你永远不会直接使用STL。请花点时间阅读,尤其是命名为和的部分。也可以采取,阅读,以及。最后,学习如何创建一个.c,或者你想要一个C或C++的答案?不要混淆C和C++。它们是两种截然不同的语言。对于searchValue=1,它给出了:上界索引=2,下界索引=0。这会造成混淆,因为对于1,上界和下界应该是index=1。在哪里做代码更改?非常好,我已经编辑了我的代码。请检查此项。变量上限已声明,但从未初始化为已知值,因此访问内容未定义。我认为上限也应初始化为-1,因为arr[]={0,2,3,4,5}和searchValue=6。在本例中,不存在6的上限,但代码返回了错误的下限和上限的索引0。但是这里6个没有上限和下限。是的,很好。