h-b-z-d-j-s-m 发表于 2022-11-9 15:56:51

二分法查找

二分法查找,为什么没有运行出来
#include<stdio.h>
int search(int a[],int t,int n);
int main()
{
    int a;
        int i,j,t,find;
        for(i=0;i<5;i++)
                scanf("%d",&a);
        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)
      {
            left = mid + 1;
      }
      else if(t<a)
      {
            right = mid - 1;
      }
      else
      {
         return mid;
      }
    }
    return -1;
}

jackz007 发表于 2022-11-9 16:08:18

本帖最后由 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               ;
      for(i = 0 ; i < n - 1 ; i ++) {
                for(j = i + 1 ; j < n ; j ++) {
                        if(a] > a]) {
                              t = b               ;
                              b = b            ;
                              b = t               ;
                        }
                }
      }
}

int search(int a[] , int t , int n)
{
      int b , left = 0 , right = n , mid            ;
      sort(a , b , n)                                  ;
      while(left <= right)
      {
                mid = (left + right) / 2               ;
                if(a] == t) {
                        return b                  ;
                } else {
                        if(t > a]) left = mid + 1 ;
                        else right = mid - 1             ;
                }
      }
      return -1                                        ;
}

int main(void)
{
      int a , i , j , n , t , find               ;
      for(i=0 ; i < 5 ; i ++) scanf("%d" , & a)    ;
      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:\\C>g++ -o x x.c

D:\\C>x
3 5 2 8 1
请输入一个新的整数 : 5
t的值是数中第 1个

D:\\C>g++ -o x x.c

D:\\C>x
3 5 2 8 1
请输入一个新的整数 : 1
t 的值是数中第 5个

D:\\C>x
3 5 2 8 1
请输入一个新的整数 : 3
t 的值是数中第 1个

D:\\C>x
3 5 2 8 1
请输入一个新的整数 : 5
t 的值是数中第 2个

D:\\C>

h-b-z-d-j-s-m 发表于 2022-11-9 16:29:36

jackz007 发表于 2022-11-9 16:08


请问我的是哪儿错了啊

jackz007 发表于 2022-11-9 16:31:30

h-b-z-d-j-s-m 发表于 2022-11-9 16:29
请问我的是哪儿错了啊

       第 20 行 right = 4,应该是 right = n
页: [1]
查看完整版本: 二分法查找