| 
 | 
 
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册  
 
x
 
二分法查找,为什么没有运行出来 
- #include<stdio.h>
 
 - int search(int a[],int t,int n);
 
 - int main()
 
 - {
 
 -     int a[5];
 
 -         int i,j,t,find;
 
 -         for(i=0;i<5;i++)
 
 -                 scanf("%d",&a[i]);
 
 -         printf("请输入一个新的整数:");
 
 -         scanf("%d",&t);
 
 -         find=search(a,t,5);
 
 -         if(find==-1)
 
 -                 printf("not found");
 
 -         else
 
 -                  printf("t的值是数中第%个:",find);
 
 -         return 0;
 
 - }
 
 - int search(int a[],int t,int n)
 
 - {
 
 -         int left=0,right=4,mid;
 
 -         
 
 -     while(left <= right)
 
 -     {
 
 -                 mid=(left+right)/2;
 
 -         if( t>a[mid])
 
 -         {
 
 -             left = mid + 1;
 
 -         }
 
 -         else if(t<a[mid])
 
 -         {
 
 -             right = mid - 1;
 
 -         }
 
 -         else
 
 -         {
 
 -            return mid;
 
 -         }
 
 -     }
 
 -     return -1;
 
 - }
 
  复制代码 
 本帖最后由 jackz007 于 2022-11-9 16:29 编辑 
- #include<stdio.h>
 
  
- void sort(int a[] , int b[] , int n)
 
 - {
 
 -         int i , j , t                                    ;
 
 -         for(i = 0 ; i < n ; i ++) b[i] = i               ;
 
 -         for(i = 0 ; i < n - 1 ; i ++) {
 
 -                 for(j = i + 1 ; j < n ; j ++) {
 
 -                         if(a[b[i]] > a[b[j]]) {
 
 -                                 t = b[i]                 ;
 
 -                                 b[i] = b[j]              ;
 
 -                                 b[j] = t                 ;
 
 -                         }
 
 -                 }
 
 -         }
 
 - }
 
  
- int search(int a[] , int t , int n)
 
 - {
 
 -         int b[n] , left = 0 , right = n , mid            ;
 
 -         sort(a , b , n)                                  ;
 
 -         while(left <= right)
 
 -         {
 
 -                 mid = (left + right) / 2                 ;
 
 -                 if(a[b[mid]] == t) {
 
 -                         return b[mid]                    ;
 
 -                 } else {
 
 -                         if(t > a[b[mid]]) left = mid + 1 ;
 
 -                         else right = mid - 1             ;
 
 -                 }
 
 -         }
 
 -         return -1                                        ;
 
 - }
 
  
- int main(void)
 
 - {
 
 -         int a[5] , i , j , n , t , find                 ;
 
 -         for(i=0 ; i < 5 ; i ++) scanf("%d" , & a[i])    ;
 
 -         printf("请输入一个新的整数 : ")                 ;
 
 -         scanf("%d" , & t)                               ;
 
 -         find = search(a,t,5);
 
 -         if(find == -1) printf("not found\n")            ;
 
 -         else printf("t的值是数中第 %d个\n" , find + 1)  ;
 
 -         return 0                                        ;
 
 - }
 
  复制代码
        编译运行实况:
 - D:\[00.Exerciese.2022]\C>g++ -o x x.c
 
  
- D:\[00.Exerciese.2022]\C>x
 
 - 3 5 2 8 1
 
 - 请输入一个新的整数 : 5
 
 - t的值是数中第 1个
 
  
- D:\[00.Exerciese.2022]\C>g++ -o x x.c
 
  
- D:\[00.Exerciese.2022]\C>x
 
 - 3 5 2 8 1
 
 - 请输入一个新的整数 : 1
 
 - t 的值是数中第 5个
 
  
- D:\[00.Exerciese.2022]\C>x
 
 - 3 5 2 8 1
 
 - 请输入一个新的整数 : 3
 
 - t 的值是数中第 1个
 
  
- D:\[00.Exerciese.2022]\C>x
 
 - 3 5 2 8 1
 
 - 请输入一个新的整数 : 5
 
 - t 的值是数中第 2个
 
  
- D:\[00.Exerciese.2022]\C>
 
  复制代码 
 
 
 |   
 
 
 
 |