C语言,用折半查找算法在给定的有序序列中查找与给定值k相等的第一个元素,输出其所在位置及比较的次数

2024-06-19 14:38:28 浏览

折半查找需要对数据进行排序。 以上是冒泡排序算法的实现。折半查找算法描述如下:在有序表中,把待查找数据值与查找范围的中间元素值进行比较,会有三种情况出现:

C语言,用折半算法在给定的有序序列中

1) 待查找数据值与中间元素值正好相等,则放回中间元素值的索引。

2) 待查找数据值比中间元素值小,则以整个查找范围的前半部分作为新的查找范围,执行1),直到找到相等的值。

3) 待查找数据值比中间元素值大,则以整个查找范围的后半部分作为新的查找范围,执行1),直到找到相等的值4) 如果最后找不到相等的值,则返回错误提示信息。 实现如下:复杂度分析:折半查找就像搜素二叉树:中间值为二叉树的根,前半部分为左子树,后半部分为右子树。折半查找法的查找次数正好为该值所在的层数。等概率情况下,约为log2(n+1)-1,其算法复杂度为O(log(n))。

/*完全手写没调过……用前慎重*/ void insert(int* array, int len, int x){ if(len==0){ /*array元素整体后移*/ *array = x; return; } if(x<=array[len/2]

1. 存储在数组中(例如一维数组)

2. 数组元素为有序(例如升序)查找的基本思想:折半查找,设查找的元素为value value与中间元素(middle = left + (right -left) / 2这样做的好处防止中间元素出现越界)比较,若比中间值小则查找范围在middle + 1继续查找,若比中间值大则查找范围在middle -1,若与中间值相等则查找结束索引元素为value = middle。 

本文版权声明本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,请联系本站客服,一经查实,本站将立刻删除。