首页 > 编程知识 正文

c语言从入门到项目实战,c语言应用实例

时间:2023-05-06 05:04:52 阅读:140513 作者:1778

在C语言中用二分法寻找是一个沉重的难点,如何在字符串(数字等)堆中快速找到自己想要的东西? 今天大家来把握吧。

ps: 这里只介绍有序的数,如果是无序的,可以用冒泡排序法先进行一下排序,这个稍后会详细说明。

首先介绍二分法检索:

数组arr[10]中现有的数字1 2 3 4 5 6 7 8 9 10,为了查找7在哪里,采用最简单且暴力的查找方法,也就是从第一个数字开始查找7次,对于非常大的数组,查找的数量会非常大,这样的查找方法效率非常低

使用二分法可知,1234567810对应的下标分别为012345789,即7对应的下标分别为6,1和10对应的下标分别为0和9。 求一次平均值后,这里默认为int(09 )/2=4。

在4610,下一个搜索的下标范围也被认为是5-9(4和10都没有考虑,范围是) 4,10 (因为是整数,所以被认为是(5,9 ) ),并且进行第二次搜索,5和9对应于4和8,1次

C语言二分法搜索代码如下。

` ` ` c#include stdio.hint main () intarr [ 10 ]={ 1,2,3,4,5,6,7,8,9,10 }; intSZ=sizeof(arr )/sizeof ) arr[0]; int k=7; 输入左=0; int right=sz - 1; wile(left=right({intmid=) leftright )/2; //如果在此将本职工作置于while之外,则mid一直为=(0)9)/2 ) 4,一旦进行了搜索,则为arr(4)=57,left=mid 1=5。 left=59=right进入循环,arr[4]=57 .在此循环中,arr[mid]将永远小于k //上一行。 这是为了允许每次循环时重新定义midif[arr[mid]k]{left},//arr[mid]k,表示下标的mid位于k下标的左侧,下一次搜索应从mid的右侧开始//arr[mid]k表示下标的mid位于k下标的右侧。 那么,下一次的检索应该从mid的左侧开始调查。 因此,当mid-1}else//mid=k时,{printf (,几%d,位置为arr(%d ),k,break; //这里while条件是left=right,所以偶然找到的最后一个数是要找的数,left=right=(left right )/2=mid,这是while一直循环,找到的话break }return 0; ``````

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。