今天学习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;

    }

}

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

c语言学习笔记 - 顺序查找和哨兵查找比较的更多相关文章

  1. C语言学习笔记-顺序表

    #include "stdafx.h" #include <stdio.h> #include <stdlib.h> #include "coni ...

  2. Go语言学习笔记(1)——顺序编程

    Go语言学习笔记这一堆主要是<Go语言编程>(人民邮电出版社)的读书笔记.中间会穿插一些零碎的点,比如源码学习之类的.大概就是这样吧. 1. 顺序编程 1.1 变量 变量的声明: var ...

  3. HTML语言学习笔记(会更新)

    # HTML语言学习笔记(会更新) 一个html文件是由一系列的元素和标签组成的. 标签: 1.<html></html> 表示该文件为超文本标记语言(HTML)编写的.成对出 ...

  4. 2017-04-21周C语言学习笔记

    C语言学习笔记:... --------------------------------- C语言学习笔记:学习程度的高低取决于.自学能力的高低.有的时候生活就是这样的.聪明的人有时候需要.用笨的方法 ...

  5. 2017-05-4-C语言学习笔记

    C语言学习笔记... ------------------------------------ Hello C语言:什么是程序:程序是指:完成某件事的既定方式和过程.计算机中的程序是指:为了让计算机执 ...

  6. GO语言学习笔记(一)

    GO语言学习笔记 1.数组切片slice:可动态增长的数组 2.错误处理流程关键字:defer panic recover 3.变量的初始化:以下效果一样 `var a int = 10` `var ...

  7. Haskell语言学习笔记(88)语言扩展(1)

    ExistentialQuantification {-# LANGUAGE ExistentialQuantification #-} 存在类型专用的语言扩展 Haskell语言学习笔记(73)Ex ...

  8. (转)【学习笔记】通过netstat+rmsock查找AIX端口对应进程

    原文:http://www.oracleplus.net/arch/888.html https://www.ibm.com/support/knowledgecenter/zh/ssw_aix_72 ...

  9. Go语言学习笔记十三: Map集合

    Go语言学习笔记十三: Map集合 Map在每种语言中基本都有,Java中是属于集合类Map,其包括HashMap, TreeMap等.而Python语言直接就属于一种类型,写法上比Java还简单. ...

随机推荐

  1. 解决eclipse启动时出现“failed to load the jni shared library”

    如何解决启动eclipse出现failed to load the jni shared library的问题 问题描述:启动eclipse时,出现以下弹出框 此时,即表示eclispe和jdk位数不 ...

  2. idae for mac部分背景色修改收集

    文章目录 所有字体默认颜色 终端背景色 行数line number背景色 line number颜色 编码区背景色 光标所在行背景色 未被使用的变量.方法或者类 控制台相关 选中文字的背景色 选中和未 ...

  3. idea for mac 项目打开的情况下import project

    commad + ,进入设置页面,搜索框输入menu,选择file下面的任意一个都行: 点击打开的窗口中的others 不需要重启 参考:https://blog.csdn.net/zengxiaos ...

  4. org.apache.ibatis.binding.BindingException: Parameter 'xxx' not found. Available parameters are [arg1, arg0, param1, param2]

    这个异常说明参数没有加上@Param注解,加上这个注解就行了. 默认情况下mybatis把参数按顺序转化为[0, 1, param1, param2],也就是说#{0} 和 #{param1} 是一样 ...

  5. springboot-配置多数据源(AOP实现)(HikariCP + MybatisPlus + mysql + SqlServer)

    场景: springboot项目,默认使用HikariCP连接池 + MybatisPlus持久层框架 + mysql数据库等一套流程,现需求需去第三方sqlserver数据库拉取数据,直连数据库,不 ...

  6. 6_3.springboot2.x数据整合Mybatis(注解和非注解)

    1.配置文件 pom.xml 导入mybatis提供的启动器 <dependency> <groupId>org.mybatis.spring.boot</groupId ...

  7. 【转载】flex布局超过显示省略号

    <div class="main"> <div class="content"> <h4 class="name&quo ...

  8. <Python基础>字典的基本操作

    ''' 小知识 1.字典的键只能是不可变数据类型:int 元组 bool str(可哈希) 字典查找数据会使用二分查找,会先用哈希表将键转化为数字然后进行查找 ''' s = { "name ...

  9. selenium基础(控制浏览器)

    python基础(控制浏览器) 控制浏览器 控制浏览器窗口大小 设置浏览器屏幕大小方法:set_window_size() 浏览器最大化:maximize_window() 浏览器最小化:minimi ...

  10. 如果try中有return那么finally中不要有return不然不会执行try中的return

    public class TryExer { public static void main(String[] args) { String test = test(); System.out.pri ...