0


《C游记》 番外篇(壹)二分查找显神威 猜数游戏趣味生

✨✨ 文章Gitee仓库:CSDN_C游记_玄澈: 《C游记》博客文章源代码


(壹)二分查找

📚 1.1 何为二分查找

折半查找,也称二分查找,在某些情况下相比于顺序查找,使用折半查找算法的效率更高。但是该算法的使用的前提是静态查找表中的数据必须是有序的

例如,在

  1. {5,21,13,19,37,75,56,64,88 ,80,92}

这个查找表使用折半查找算法查找数据之前,需要首先对该表中的数据按照所查的关键字进行排序:

  1. {5,13,19,21,37,56,64,75,80,88,92}

📚 1.2 二分查找的原理

升序数列为例,比较一个元素与数列中的中间位置的元素的大小如果比中间位置的元素大,则继续在后半部分的数列中进行二分查找;如果比中间位置的元素小,则在数列的前半部分进行比较;如果相等,则找到了元素的位置。每次比较的数列长度都会是之前数列的一半,直到找到相等元素的位置或者最终没有找到要找的元素。

动图演示:(于顺序查找相比较)

📚 1.3 查找条件

二分查找的前提条件是有序数列,普通查找则不需要。
查找到返回该元素的下标,否则返回-1。
普通查找的时间复杂度为O(N), 二分查找的时间复杂度为O(logN)。
N/2/2···/2=1,2^m=N(m为折半查找的次数),那么m=log(N),二分查找的时间复杂度就为O(logN)。


📚 1.4 代码实现


🎨 1.4.1 初始化数据


🎨 1.4.2 核心函数

(贰)猜数字游戏

📚 2.1 菜单初始化


📚 2.2 核心函数


📚 2.3 main函数


📚 2.4 总代码

  1. #include <stdio.h>
  2. #include <time.h>
  3. #include <stdlib.h>
  4. void menu()
  5. {
  6. printf("**********************************\n");
  7. printf("*********** 1.play ***********\n");
  8. printf("*********** 0.exit ***********\n");
  9. printf("**********************************\n");
  10. }
  11. //RAND_MAX--rand函数能返回随机数的最大值。
  12. void game()
  13. {
  14. int random_num = rand() % 100 + 1;
  15. int input = 0;
  16. while (1)
  17. {
  18. printf("请输入猜的数字>:");
  19. scanf("%d", &input);
  20. if (input > random_num)
  21. {
  22. printf("猜大了\n");
  23. }
  24. else if (input < random_num)
  25. {
  26. printf("猜小了\n");
  27. }
  28. else
  29. {
  30. printf("恭喜你,猜对了\n"); break;
  31. }
  32. }
  33. }
  34. int main()
  35. {
  36. int input = 0;
  37. srand((unsigned)time(NULL));
  38. do
  39. {
  40. menu();
  41. printf("请选择>:");
  42. scanf("%d", &input);
  43. switch (input)
  44. {
  45. case 1:
  46. game();
  47. break;
  48. case 0:
  49. break;
  50. default:
  51. printf("选择错误,请重新输入!\n");
  52. break;
  53. }
  54. } while (input);
  55. return 0;
  56. }


本文转载自: https://blog.csdn.net/forever_bryant/article/details/122519259
版权归原作者 玄澈_ 所有, 如有侵权,请联系我们删除。

“《C游记》 番外篇(壹)二分查找显神威 猜数游戏趣味生”的评论:

还没有评论