经过小编的认真思考与研究,发现二分法排序以后所用的high,low代表的是经过排序后最大值、最小值所对应的位置,而不是指最大(小)值,但也可以尝试一下只挑选出最大值和最小值进行找中间值,可是由于中间值可能会有小数导致错误,所以不推荐用最大值与最小值这样做。以下是折半查找法的创新篇(二分法):先排序后查找。
#include <stdio.h>
#define MAXN 10
int main()
{
int i,n,a[MAXN],k,min,max;
printf("Enter n:");
scanf("%d",&n);
printf("Enter %d integer:",n);
for(i=0;i<n;i++){
scanf("%d",&a[i]);
}
for(k=0;k<n-1;k++){
min=k;
max=k;
for(i=k+1;i<n;i++){
if(a[i]<a[min]){
min=i;
}
}
for(i=0;i<n;i++){
if(a[i]>a[max]){
max=i;
}
}
int temp;
temp=a[min];
a[min]=a[k];
a[k]=temp;
}
printf("Result:\n");
for(i=0;i<n;i++){
printf("%4d",a[i]);
}
printf("\n");
int low,high,mid,x;
printf("Enter x:");
scanf("%d",&x);
low=0,high=n-1;
mid=(low+high)/2;
while(low<=high){
if(x==a[mid]){
printf("index=%d",mid);
break;
}
else if(x>a[mid]){
low=mid+1;
mid=(low+high)/2;
}
else{
high=mid-1;
mid=(high+low)/2;
}
}
if(low>high) {
printf("Not Found\n");
}
return 0;
}