二分搜尋演算法求元素位置(c語言)

頭髮太多想掉一點發表於2020-10-31

題目:設a[0:n-1]是已經排好序的陣列。請修改二分搜尋演算法,使得當搜尋元素x不在陣列中時,返回小於x的最大元素位置i,和大於x最小元素的位置j。當搜尋元素在陣列中時,ij是相同的,均為x在陣列中所在的位置。
c語言實現如下

#include<stdio.h>
int *find_location(int *a,int left,int right,int x);
int mian(){
	int a[10]={11,22,33,44,55,66,77,88,99,111};
	int *result=find_location(a,0,9,44);
	if(result[0]==result[1])
	{
		printf("查詢的元素為第%d號元素\n");
	 } else{
		printf("查詢的元素位於陣列的第%d號元素和第%d號元素之間\n",result[0],result[1]);
	 }
return 0;
}
int *find_location(int *a,int left,int right,int x){
	int center=(left+right)/2;
	int result[2];
	if((right-left)<=1){
		result[0]=left+1;
		result[1]=right+1;
		return result;
	}
	if(a[center]==x){
		result[0]=result[1]=center+1;
	}else{
		if(x<a[center]){
			return find_location(a,left,center,x);
		}else{
			return find_location(a,center,right,x);
		}
	}
	return result;
}

相關文章