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;
}
}
当然,在循环次数很小的情况下,差别也不大,但是如果循环次数达到了上万次,或者调用次数很多的话,还是有必要对循环内容进行优化,减少循环里的时间和空间消耗。
c语言学习笔记 - 顺序查找和哨兵查找比较的更多相关文章
- C语言学习笔记-顺序表
#include "stdafx.h" #include <stdio.h> #include <stdlib.h> #include "coni ...
- Go语言学习笔记(1)——顺序编程
Go语言学习笔记这一堆主要是<Go语言编程>(人民邮电出版社)的读书笔记.中间会穿插一些零碎的点,比如源码学习之类的.大概就是这样吧. 1. 顺序编程 1.1 变量 变量的声明: var ...
- HTML语言学习笔记(会更新)
# HTML语言学习笔记(会更新) 一个html文件是由一系列的元素和标签组成的. 标签: 1.<html></html> 表示该文件为超文本标记语言(HTML)编写的.成对出 ...
- 2017-04-21周C语言学习笔记
C语言学习笔记:... --------------------------------- C语言学习笔记:学习程度的高低取决于.自学能力的高低.有的时候生活就是这样的.聪明的人有时候需要.用笨的方法 ...
- 2017-05-4-C语言学习笔记
C语言学习笔记... ------------------------------------ Hello C语言:什么是程序:程序是指:完成某件事的既定方式和过程.计算机中的程序是指:为了让计算机执 ...
- GO语言学习笔记(一)
GO语言学习笔记 1.数组切片slice:可动态增长的数组 2.错误处理流程关键字:defer panic recover 3.变量的初始化:以下效果一样 `var a int = 10` `var ...
- Haskell语言学习笔记(88)语言扩展(1)
ExistentialQuantification {-# LANGUAGE ExistentialQuantification #-} 存在类型专用的语言扩展 Haskell语言学习笔记(73)Ex ...
- (转)【学习笔记】通过netstat+rmsock查找AIX端口对应进程
原文:http://www.oracleplus.net/arch/888.html https://www.ibm.com/support/knowledgecenter/zh/ssw_aix_72 ...
- Go语言学习笔记十三: Map集合
Go语言学习笔记十三: Map集合 Map在每种语言中基本都有,Java中是属于集合类Map,其包括HashMap, TreeMap等.而Python语言直接就属于一种类型,写法上比Java还简单. ...
随机推荐
- csp-s模拟9697题解
题面:https://www.cnblogs.com/Juve/articles/11790223.html 96: 刚一看以为是水题,直接等差数列求和就好了,然后发现模数不是质数,还要1e18*1e ...
- python基础-基础知识(包括:函数递归等知识)
老男孩 Python 基础知识练习(三) 1.列举布尔值为 False 的值空,None,0, False, ", [], {}, () 2.写函数:根据范围获取其中 3 和 7 整除的所有 ...
- PAT甲级——A1120 Friend Numbers【20】
Two integers are called "friend numbers" if they share the same sum of their digits, and t ...
- Python第一课-Python的下载与安装
官网 https://www.python.org/ 我们安装的是windows 系统 Python3和Python2版本不兼容,我们下载最新的Python3.7.4 下载executatable版本 ...
- WPF drag过程中显示ToolTip.
原文:WPF drag过程中显示ToolTip. 在drag/drop过程中,我们在判断出over的元素上是否可以接受drag的东西之后,通常是通过鼠标的样式简单告诉用户这个元素不接受现在drag的内 ...
- /bin /usr/bin /sbin /usr/sbin 目录的作用
/bin是系统的一些指令.bin为binary的简写主要放置一些系统的必备执行档例如:cat.cp.chmod df.dmesg.gzip.kill.ls.mkdir.more.mount.rm.su ...
- grep 查看前后几行和参数匹配
如果在只是想匹配模式的上下几行,grep可以实现. grep -5 'parttern' inputfile //打印匹配行的前后5行 grep -C 5 'parttern' inputfile ...
- Amazon DynamoDB
- UMP系统架构 Controller服务器
- [转]关于 MVVMLight 设计模式系列
关于 MVVMLight 设计模式系列 http://www.wxzzz.com/958.html MvvmLight框架使用入门 http://www.cnblogs.com/manupstairs ...