zoukankan      html  css  js  c++  java
  • c语言学习笔记

    今天学习C时用到了顺序查找和哨兵查找,做了一个比较,主要是学习下哨兵查找法

    例如在一个数组里查找一个元素,没找到返回-1,找到了则返回这个数组的下标也就是键值。

    用循序查找法:

    void arr_search(int arr[],int len,int key){

      int i=0;

      while(1){             

        if(i==len){    //用循序查找需要每个循环都判断是否已经循环完这个数组了

          return -1;  

        }    

        if(arr[i]==key){  //查找是否找到键值

          return i;

        }

        i++;

      }

    }

    //用哨兵查找法

    void arr_search(int arr[],int len,int key){

      arr[len]=key; //把哨兵追加到数组末尾

      int i=0;

      while(1){    

        if(arr[i]==key){   //用哨兵找法,前面如果没找到要的值至少轮询到哨兵时会结束循环,这样相对比顺序查找肯定就少了一个循环

          return i;

        }

        i++;

      }

      return i==len?-1:i; //最后返回的时候再判断下是否是最后哨兵对应的键值,如果返回的是哨兵,说明没找到对应的数据

    }

    前面的例子用while循环如果用 for循环代替

    例如改成以下,似乎也是少了一个if判断,和哨兵法一样省去了一个if判断,其实这个写法只是把条件判断写在了外边,即 括号里的  i<len

    for(i=0;i<len;i++){

       if(arr[i]==key){  //查找是否找到键值

          return i;

        }

    }

    当然,在循环次数很小的情况下,差别也不大,但是如果循环次数达到了上万次,或者调用次数很多的话,还是有必要对循环内容进行优化,减少循环里的时间和空间消耗。

  • 相关阅读:
    字节跳动_玩转客户端训练营
    Mac更换鼠标指针样式_mousecape教程
    能否使用GHDL+GTKWave代替Quartus ii
    关于新家布置的一点小经验——开博第一篇
    Azure直播活动资源转成MP4并下载到本地
    程序员必备的6款工具软件!
    Java 类型的 Hibernate 映射
    Window10下Erlang和RabbitMQ的下载安装
    Tomcat部署项目,JS文件及后台数据显示都是乱码问题解决
    go语言入门及基本算法
  • 原文地址:https://www.cnblogs.com/luckylihuizhou/p/6423510.html
Copyright © 2011-2022 走看看