二分查找数组中与目标数字(可以是浮点型)最近的数的位置

 0 ///欢迎批评指正
1
#include <stdio.h> 2 3 int a[100]; 4 5 int search(int start,int end,double distinction){ 6 int mid; 7 if(distinction > a[end - 1]) 8 return end - 1; 9 if(distinction < a[start]) 10 return start; 11 while(1){ 12 mid = (start + end) / 2; 13 if(a[mid - 1] < distinction && a[mid] > distinction) 14 return ((a[mid] - distinction) >= (distinction - a[mid - 1])) ? mid - 1 : mid; 15 if(distinction > a[mid]){///(a[start] + a[end]) / 2.0 > 16 start = mid; 17 }else if(distinction < a[mid]){ 18 end = mid; 19 }else{ 20 return mid; 21 } 22 } 23 } 24 int main(void){ 25 int n; 26 double m; 27 printf("输入数组元素个数:\n"); 28 scanf("%d",&n); 29 for(int i = 0; i < n; i++) 30 scanf("%d",&a[i]); 31 while(scanf("%lf",&m)!=0){ 32 printf("%d\n",search(0,n,m)); 33 } 34 35 return 0; 36 }

 

posted @ 2016-04-24 08:58  赤云封天  阅读(508)  评论(0编辑  收藏  举报