我一直在尝试使用递归(对我来说是一个新概念)来编写二进制搜索。我研究了很多并想出了这个:
int binary_search(int *parr, int value, int left, int right){
int middle = (left+right)/2;
if(*(parr+middle)==value){
return 1;
}
if(right<left){
return 0;
}
if(*(parr+middle)>value){
return binary_search(*parr, value, left, middle-1);
}
else{
return binary_search(*parr, value, middle+1, right);
}
}
这是我的主要功能:
int main()
{
int arr[maxbr],n, i, g;
do{
printf("\n n=");
scanf("%d", &n);
} while(n>maxbr);
for(i=0; i<n; i++){
printf("\n a[%d]", i);
scanf("%d", &arr[i]);
}
g = binary_search(arr, 5, 0, n-1);
printf(" %d", g);
}
由于某种原因,在我输入n和数组后崩溃了。在此先感谢您的帮助!
答案 0 :(得分:2)
你可能想要:
return binary_search(parr, value, left, middle-1);
在parr面前没有* * parr是第一个int,parr是数组。
(另修一个)
答案 1 :(得分:0)
如果您愿意,可以尝试一下。
我实现了没有任何指针的递归二进制搜索,并确保检查了二进制搜索所需的所有条件。
关注我如何计算中间元素位置。
二进制搜索中的一个非常重要的条件是,应该对数组进行排序,并且始终将左索引设为<=右索引。
这是我的代码...
#include <stdio.h>
int binarySearch(int arr[],int x,int l,int m,int r){
while (l<=r){
if(arr[m] == x){
return m+1;
}
else if(arr[m] > x){
return binarySearch(arr,x,l,(l+(m-1))/2,m-1);
}
else if(arr[m] < x){
return binarySearch(arr,x,m+1,((m+1)+r)/2,r);
}
}
return -1;
}
int main(){
int n,m,x;
printf("Enter number of array elements: ");
scanf("%d",&n);
int l=0,r=n-1;
if(r>=1){
int arr[n],i,j;
int temp=0,swapFlag=0;
printf("\nInsert %d elements:\n",n);
for(i=0;i<n;i++){
scanf("%d",&arr[i]);
}
printf("Insert complete.\n");
printf("\nYour array looks like:\n");
for(i=0;i<n;i++){
printf("%d ",arr[i]);
}
//Remember binary search only works for sorted arrays.
//Applying bubble sort to the array
for(i=0;i<n-1;i++){
swapFlag = 0;
for(j=0;j<n-i-1;j++){
if(arr[j]>arr[j+1]){
swapFlag = 1;
//Swapping unordered pairs
temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
//Condition to reduce number of passes & comparisons
if(swapFlag == 0){
break;
}
}
printf("\n\nAfter sorting the array looks like:\n");
for(i=0;i<n;i++){
printf("%d ",arr[i]);
}
printf("\n\nEnter an element that you want to find: ");
scanf("%d",&x);
m = (l+r)/2;
int result = binarySearch(arr,x,l,m,r);
if(result != -1){
printf("\nYes! Element %d is found at position %d.",x,result);
}
else{
printf("\nOops! Element %d is not found.",x);
}
}
else{
printf("Binary search is not required as array has only 1 element.");
}
return 0;
}
结果:-