c语言编程实现“折半查找”的过程。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c语言编程实现“折半查找”的过程。相关的知识,希望对你有一定的参考价值。

编程实现“折半查找”的过程。 折半查找的处理过程:在一个数据已排好序的数组中,首先比较要查找的值与数组中间的元素,如果两者相等,则查找结束;如果前者比后者小,则要查找的数据必然在数组的前半部,此后只需在数组的前颁布中继续折半查找;如果前者的... 程实现“折半查找”的过程。 折半查找的处理过程:在一个数据已排好序的数组中,首先比较要查找的值与数组中间的元素,如果两者相等,此后只需在数组的前颁布中继续折半查找;如果前者的数值比后者大,则要查找的数据必然在数组的后半部;如果前者比后者小,则要查找的数据必然在数组的前半部,设定输入的数据是无序的: 1) 设定一个整形数组存放20个元素,采用直接赋值地方法在程序中初始化该数组(假设这些数据已排列) 2) 用scanf函数输入一个要找的数值 3) 对查找的结果给出相应的说明,如果找到该数值,则输出“Found”信息,并给出该书是数组中的第几个元素。如果该数值不在数组中,则输出“Not found”信息 4) 修改程序,此后只需在数组的后半部继续进行折半查找 要求,编写一个选择排序函数,对无序数据进行排序;编写一个查找函数对已排好序的数据进行查找。在主函数中数据(无序),则查找结束,则先要对这些无序数据进行排序,然后再采用“折半查找” 5) 修改程序 展开 运行有问题呀,能不能修改一下

参考技术A //参考代码如下:
#include <stdio.h>
int main()

int i, j, n, k=0, isFound=0;
int num[15] = 88,86,75,74,61,56,52,43,39,34,31,22,18,16,8; //测试数组
printf("请输出一个整数:\n");
scanf("%d", &n);
i = (int)15/2; //对折位移量
j = (int)15/2; //取数“指针”
while(k<2)

i = (int)i/2;
if(i == 0) k++; //i==0 即折半到无可再折时,仍有最后一次比较,故以k做计数
//若未相等,计算下一循环指针的位置
if(n<num[j])
j = j + (i + 1);
else if(n>num[j])
j = j - (i + 1);
else

isFound = 1;
break; //若找到相等数,标记已找到并退出循环


//输出结果
if(isFound)
printf("该数是数组中第%d个元素的值\n", j);
else
printf("查无此数!\n");
return 0;

折半查找的算法思想实现及其判定树的查找和构造(C语言)

一、折半查找

(一)算法思想

  • 折半查找,又称“二分查找”,仅适用于有序的顺序表。

1. 查找成功






2. 查找失败




(二)算法实现

(三)查找判定树

1. 查找效率分析

2. 折半查找判定树的构造

  • 如果当前low和high之间有奇数个元素,则 mid 分隔后,左右两部分元素个数相等
  • mid = ⌊(low + high)/2⌋
  • 如果当前low和high之间有偶数个元素,则 mid 分隔后,左半部分比右半部分少一个元素
  • mid = ⌊(low + high)/2⌋
  • 如果当前low和high之间有奇数个元素,则 mid 分隔后,左右两部分元素个数相等
  • 如果当前low和high之间有偶数个元素,则 mid 分隔后,左半部分比右半部分少一个元素




  • 折半查找的判定树一定是平衡二叉树
  • 折半查找的判定树中,只有最下面一层是不满的。因此,元素个数为n时树高h = ⌈log2(n + 1)⌉
  • 判定树结点关键字:左<中<右,满⾜⼆叉排序树的定义;
  • 失败结点:n+1个(等于成功结点的空链域数量)

(四)折半查找效率

(五)扩展

  • 我们通过上面的图即可看出,折半查找不一定比顺序查找更快。因为当查找的元素和顺序表中第一个元素就匹配的时候,顺序查找速度更快。
  • 如果当前low和high之间有奇数个元素,则 mid 分隔后,左右两部分元素个数相等
  • 如果当前low和high之间有偶数个元素,则 mid 分隔后,左半部分比右半部分多一个元素

以上是关于c语言编程实现“折半查找”的过程。的主要内容,如果未能解决你的问题,请参考以下文章

C语言试题177之实现二分查找算法,折半查找算法

c语言折半查找法

二分查找(折半查找)算法详解(C语言实现)

折半查找(C语言)

折半查找(C语言)

C语言折半查找法详细代码(假如有10个已排好序的数)