当前位置:   article > 正文

数组折半法查找数据(C语言)

数组折半法查找数据(C语言)

一、N-S流程图

二、运行结果;

三、源代码;

  1. # define _CRT_SECURE_NO_WARNINGS
  2. # include <stdio.h>
  3. //定义数据;
  4. #define N 15
  5. int main()
  6. {
  7. //初始化变量值;
  8. int a[N], i, top, bott, loca, flag = 1, sign, number, mid;
  9. char c;
  10. //填充数据;
  11. a[0] = 1;
  12. i = 1;
  13. //循环填充数;
  14. while (i < N)
  15. {
  16. //填充;
  17. printf("a[%d]=", i);
  18. scanf("%d", &a[i]);
  19. //判断;
  20. if (a[i] >= a[i - 1])
  21. {
  22. //改变变量值;
  23. i++;
  24. }
  25. else
  26. {
  27. //提示用户;
  28. printf("您输入的数据不符合要求!!!\n");
  29. printf("请重新输入:\n");
  30. }
  31. }
  32. //换行;
  33. printf("\n");
  34. //循环打印数组;
  35. for (i = 0; i < N; i++)
  36. {
  37. //打印;
  38. printf("%5d", a[i]);
  39. }
  40. //换行;
  41. printf("\n");
  42. //判断数据是否在数组中;
  43. while (flag)
  44. {
  45. //获取数据;
  46. printf("请输入您要查找的数据:");
  47. scanf("%d", &number);
  48. //赋值;
  49. sign = 0;
  50. top = 0;
  51. bott = N - 1;
  52. //判断数据是否在数组内;
  53. if ((number < a[0]) || (number > a[N - 1]))
  54. {
  55. //改变变量值;
  56. loca = -1;
  57. }
  58. else
  59. {
  60. //折半查找;
  61. while ((sign == 0) && (top <= bott))
  62. {
  63. //求出中间下标值;
  64. mid = (top + bott) / 2;
  65. //比较;
  66. if (number == a[mid])
  67. {
  68. //改变变量值;
  69. loca = mid;
  70. sign = 1;
  71. //输出值;
  72. printf("您输入的数据%d在数组中是第%d个元素值\n", number, loca + 1);
  73. }
  74. else if (number < a[mid])
  75. {
  76. //改变变量值;
  77. bott = mid - 1;
  78. }
  79. else
  80. {
  81. //改变变量值;
  82. top = mid + 1;
  83. }
  84. }
  85. }
  86. //判断;
  87. if ((sign == 0) || (loca == -1))
  88. {
  89. //输出结果;
  90. printf("您输入的数值%d在数组中无结果!!!\n", number);
  91. }
  92. //是否结束程序;
  93. printf("是否要结束查找?(Y/N)\n");
  94. scanf(" %c", &c);
  95. //判断;
  96. if (c == 'N')
  97. {
  98. //改变变量值;
  99. flag = 0;
  100. }
  101. }
  102. return 0;
  103. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/556323
推荐阅读
相关标签
  

闽ICP备14008679号