问题描述: N个有序整数数列已经放在一维数组中, 利用二分查找法查找整数m在数组中的位置。 若找到,则输出其下标值;反之,则输出“Not be found!” 参考代码:
#include<stdio.h> #define N 10 int main() { int i; int mid; int m; int low = 0; int high = N - 1; int k = -1; int a[N] = {-3,4,7,9,13,45,67,89,100,180}; printf("a 数组中的数据如下:\n"); for(i = 0; i < N; i++) { printf("%d ",a[i]); } printf("\n"); printf("Enter m:\n"); scanf("%d",&m); while(low <= high) { mid = (low + high) / 2; if(m < a[mid]) { high = mid - 1; } else if(m > a[mid]) { low = mid + 1; } else { k = mid; break; } } if(k >= 0) { printf("m = %d,index = %d\n",m,k); } else { printf("Not be found!\n"); } return 0; }参考代码:
#include<stdio.h> #define N 13 int main() { int f_dig; int i; int low; int high; int mid; int k = 0; int dig[N] = {-2,4,5,8,13,15,17,32,35,38,43,58,59}; printf("array_dig condition is:\n"); for(i = 0 ;i < N; i++) { printf("%d ",dig[i]); } printf("\nPlease input the digit f_dig that need to be found:\n"); scanf("%d",&f_dig); low = 0; high = N - 1; while(low <= high) { mid = (low + high) / 2; if(dig[mid] > f_dig) { high = mid - 1; } else if(dig[mid] < f_dig) { low = mid + 1; } else if(dig[mid] == f_dig) { printf("digit %d; index:%d\n",dig[mid],mid); k = 1; break; } } if(k == 0) { printf("Not be found!\n"); } return 0; }