广告合作
  • 今日头条

    今日头条

  • 百度一下

    百度一下,你就知道

  • 新浪网

    新浪网 - 提供新闻线索,重大新闻爆料

  • 搜狐

    搜狐

  • 豆瓣

    豆瓣

  • 百度贴吧

    百度贴吧——全球领先的中文社区

  • 首页 尚未审核订阅工具 订阅

    c 如何输出折半查找法比较次数

    来源:网络收集  点击:  时间:2024-04-17
    【导读】:
    那不就是二分法?每次比较后设置一个变量自增一下就好了.我举个栗子工具/原料morevc++6.0或者c#任意可以编写c语言的软件,我用的vc方法/步骤1/4分步阅读

    第一步先导入头文件,然后定义获取数组长度的函数,便于后面代码的引用

    #includestdio.h

    int a={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16};

    //先假定一个有序数组,然后向其中插入一个数值,(如果数组无序,需要先排序,此处为有序的数组)

    //令其自增规律不变,同时统计二分法比较次数

    int get_length(const int *a)//返回字符串长度

    {

    int length=0,i=0;

    while(*(a+i)!=\0)

    {

    i++;

    length++;

    }

    return length;//此处返回16

    }

    2/4

    第二步,因为数组经过二分法查找与修改,数组已经发生了变化,那么我们可以设定一个移位函数,让数组适应新的数据成员

    void move_data(int station,int *a,int insert_data)//移动插入点后的数组数据,方便插入

    {

    int i=get_length(a)+1;

    for(;i=station;i--)

    {

    *(a+i+1)=*(a+i);

    }

    *(a+station)=insert_data;

    }

    3/4

    第三部,这个是输出我们的新的数组的,为了使用方便,写成函数的形式

    void pri_arr(int *a)//输出数组内的数据

    {

    int i=0;

    printf(输出%d位数据\n,get_length(a));

    while(*(a+i)!=\0)

    {

    printf(%d ,*(a+i));

    i++;

    }

    }

    4/4

    第四步,进入主函数,写我们的二分算法

    void main()

    {

    int num_insert,num_start,num_stop,station,i,num_count=0;

    //插入的数据,二分法开始点,结束点,应该插入的位置,以及比较次数的计数变量

    printf(请输入一个插入的数据:);

    scanf(%d,num_insert);

    printf(数组长度为: %d\n,get_length(a));

    num_start=0;

    num_stop=get_length(a)-1;

    if(num_insert=a)//先判断极端情况

    {

    move_data(num_start,a,num_insert);

    printf(小于最小的\n);

    printf(找到的位置为%d\n,num_start);

    num_count=1;

    }

    else if(num_insert=a)//先判断极端情况

    {

    printf(比较的数据为%d\n,a);

    move_data(num_stop+1,a,num_insert);

    printf(大于最大的\n);

    printf(找到的位置为%d\n,num_stop+1);

    num_count=1;

    }

    else

    {

    do{

    i=(int)((num_start+num_stop)/2);

    if(num_insert=anum_insert=a)//找到插入点了

    {

    move_data(i,a,num_insert);

    printf(找到的位置为%d\n,i);

    num_count++;//开始计数

    break;

    }

    else if(num_inserta)

    {

    num_start=i;

    num_count++;//开始计数

    }

    else

    {

    num_stop=i;

    num_count++;//开始计数

    }

    }while(1);

    }

    pri_arr(a);

    printf(\n比较的次数为:%d\n,num_count);//输出计数

    }

    注意事项

    运行一下,亲测可用,自己写的,可以参考

    C语言二分法指针输出计算比较次数求字符串长度
    本文关键词:

    版权声明:

    1、本文系转载,版权归原作者所有,旨在传递信息,不代表看本站的观点和立场。

    2、本站仅提供信息发布平台,不承担相关法律责任。

    3、若侵犯您的版权或隐私,请联系本站管理员删除。

    4、文章链接:http://www.1haoku.cn/art_532288.html

    相关资讯

    ©2019-2020 http://www.1haoku.cn/ 国ICP备20009186号05-07 20:45:50  耗时:0.031
    0.0314s