查找(Searching)
2016-03-28 20:58
323 查看
1. 查找:根据某个给定关键字K,从集合R中找出关键字与K相同的记录。
1.1 静态查找:集合中记录是固定的。没有插入和删除操作,只有查找。
1.2 动态查找:集合中记录是动态变化的,除查找,还可能发生插入和删除
2. 顺序查找:
![](https://img-blog.csdn.net/20160328165653668)
3. 二分查找法(Binary Search):
![](https://img-blog.csdn.net/20160328171725351)
![](https://img-blog.csdn.net/20160328203115868)
二分查找算法具有对数的时间复杂度O(logN)
![](https://img-blog.csdn.net/20160328205841138)
1.1 静态查找:集合中记录是固定的。没有插入和删除操作,只有查找。
1.2 动态查找:集合中记录是动态变化的,除查找,还可能发生插入和删除
2. 顺序查找:
<span style="font-size:18px;">查找实现一: int SequentialSearch(StaticTable* Tb1, ElementType K) { /*在表Tb1[1]~Tb1 中查找关键字为K的数据元素*/ int i; Tb1->Element[0] = K; /*建立哨兵*/ for(i = Tb1->Length; Tb1->Element[i] != K; i--); return i; /*查找成功返回所在单元下标,不成功返回0*/ } 查找实现二: int SequentialSearch(StaticTable* Tb1, ElementType K) { int i; for(i = Tb1->Length; i > 0 && Tb1->Element[i] != K; i--); return i; } </span>
3. 二分查找法(Binary Search):
<span style="font-size:18px;">int BinarySearch(StaticTable* Tbl, ElementType K) { /*在表Tbl中查找关键字为K的数据元素*/ int left, right, mid, NoFound = -1; left = 1; /*初始左边界*/ right = Tbl->Length;/*初始右边界*/ while(left <= right) { mid = (left + right)/2;/*计算中间元素坐标*/ if(K < Tbl->Element[mid]) right = mid - 1;/*调整右边界*/ else if(K > Tbl->Element[mid]) left = mid + 1;/*调整左边界*/ else return mid; /*查找成功,返回数据元素的下标*/ } return NoFound; /*查找不成功,返回-1*/ }</span>
二分查找算法具有对数的时间复杂度O(logN)
相关文章推荐
- 《MySQL必知必会学习笔记》:聚集函数
- FragmentStatePagerAdapter.notifyDataSetChanged不刷新页面的解决的方法
- 栈的运用(算数表达式求值的算符优先算法 十以内简单版)
- 排序算法-及其Java代码实现
- 解析机器中加减法对于二进制补码的运用(附python代码)
- 《leetCode》:Find the Duplicate Number
- 【LeetCode】3. Longest Substring Without Repeating Characters的两种解法
- Java编程思想学习笔记-第九章 接口
- CocoaPods安装及使用详情
- K-th Number(第k大数)
- 方法封装和String语句
- 《leetCode》:Repeated DNA Sequences
- PHP中其他类型转化为Bool类型的变化情况
- java中的移位运算符:<<,>>,>>>总结
- Swift里通知的使用NSNotificationCenter
- Atitit.Gui控件and面板----数据库区-mssql 2008 权限 配置 报表查看成员
- 花开花落,我们都很渺小
- Java_chapter11_继承和多态
- 链表中倒数第K个节点
- log4j的ConversionPattern参数的格式含义-转