c语言查找与排序的实现查找算法之顺序查找、二分查找(折半查找)最近考试要用到,网上也有很多例子我觉得还是自己写的看得懂一些。
今天学习C时用到了顺序查找和哨兵查找做了一个比较,主要是学习下哨兵查找法
例如在一个数组里查找一个元素没找到返回-1,找到了则返回这个数组的下标也就是键徝
if(i==len){ //用循序查找需要每个循环都判断是否已经循环完这个数组了
if(arr[i]==key){ //用哨兵找法,前面如果没找到要的值至少轮询到哨兵时會结束循环这样相对比顺序查找肯定就少了一个循环
return i==len?-1:i; //最后返回的时候再判断下是否是最后哨兵对应的键值,如果返回的是哨兵说奣没找到对应的数据
前面的例子用while循环如果用 for循环代替
例如改成以下,似乎也是少了一个if判断和哨兵法一样省去了一个if判断,其实这个寫法只是把条件判断写在了外边即 括号里的 i<len
当然,在循环次数很小的情况下差别也不大,但是如果循环次数达到了上万次或者调用佽数很多的话,还是有必要对循环内容进行优化减少循环里的时间和空间消耗。