鱼C论坛

 找回密码
 立即注册
查看: 3540|回复: 3

[已解决]二分法查找

[复制链接]
发表于 2022-11-9 16:08:18 | 显示全部楼层    本楼为最佳答案   
本帖最后由 jackz007 于 2022-11-9 16:29 编辑
  1. #include<stdio.h>

  2. void sort(int a[] , int b[] , int n)
  3. {
  4.         int i , j , t                                    ;
  5.         for(i = 0 ; i < n ; i ++) b[i] = i               ;
  6.         for(i = 0 ; i < n - 1 ; i ++) {
  7.                 for(j = i + 1 ; j < n ; j ++) {
  8.                         if(a[b[i]] > a[b[j]]) {
  9.                                 t = b[i]                 ;
  10.                                 b[i] = b[j]              ;
  11.                                 b[j] = t                 ;
  12.                         }
  13.                 }
  14.         }
  15. }

  16. int search(int a[] , int t , int n)
  17. {
  18.         int b[n] , left = 0 , right = n , mid            ;
  19.         sort(a , b , n)                                  ;
  20.         while(left <= right)
  21.         {
  22.                 mid = (left + right) / 2                 ;
  23.                 if(a[b[mid]] == t) {
  24.                         return b[mid]                    ;
  25.                 } else {
  26.                         if(t > a[b[mid]]) left = mid + 1 ;
  27.                         else right = mid - 1             ;
  28.                 }
  29.         }
  30.         return -1                                        ;
  31. }

  32. int main(void)
  33. {
  34.         int a[5] , i , j , n , t , find                 ;
  35.         for(i=0 ; i < 5 ; i ++) scanf("%d" , & a[i])    ;
  36.         printf("请输入一个新的整数 : ")                 ;
  37.         scanf("%d" , & t)                               ;
  38.         find = search(a,t,5);
  39.         if(find == -1) printf("not found\n")            ;
  40.         else printf("t的值是数中第 %d个\n" , find + 1)  ;
  41.         return 0                                        ;
  42. }
复制代码

        编译运行实况:
  1. D:\[00.Exerciese.2022]\C>g++ -o x x.c

  2. D:\[00.Exerciese.2022]\C>x
  3. 3 5 2 8 1
  4. 请输入一个新的整数 : 5
  5. t的值是数中第 1个

  6. D:\[00.Exerciese.2022]\C>g++ -o x x.c

  7. D:\[00.Exerciese.2022]\C>x
  8. 3 5 2 8 1
  9. 请输入一个新的整数 : 1
  10. t 的值是数中第 5个

  11. D:\[00.Exerciese.2022]\C>x
  12. 3 5 2 8 1
  13. 请输入一个新的整数 : 3
  14. t 的值是数中第 1个

  15. D:\[00.Exerciese.2022]\C>x
  16. 3 5 2 8 1
  17. 请输入一个新的整数 : 5
  18. t 的值是数中第 2个

  19. D:\[00.Exerciese.2022]\C>
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-11-9 16:31:30 | 显示全部楼层
h-b-z-d-j-s-m 发表于 2022-11-9 16:29
请问我的是哪儿错了啊

       第 20 行 right = 4,应该是 right = n
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2026-4-1 12:04

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表