数据管理的基本操作-查找

文章目录

  • 基本概念
  • 静态查找
    • 方法1:顺序查找(SequentialSearch)
    • 方法2:二分查找(Binary Search)
  • 二分查找判定树
  • Updata

基本概念

查找(Searching)
根据某个给定关键字K ,从集合R中找出关键字与K相同的记录

静态查找:集合中记录是固定的
没有插入和删除操作,只有查找
动态查找:集合中记录是动态变化的
除查找,还可能发生插入和删除

静态查找

方法1:顺序查找(SequentialSearch)

顺序查找算法的时间复杂度为O(n)。

int SequentialSearch (StaticTable *Tbl, ElementType K)
{ /*在表Tbl[1]~Tbl[n]中查找关键字为K的数据元素*/
 int i;
 Tbl->Element[0] = K; /*建立哨兵*/
 for(i = Tbl->Length; Tbl->Element[i]!= K; i--);
 return i; /*查找成功返回所在单元下标;不成功返回0*/
}

方法2:二分查找(Binary Search)

假设n个数据元素的关键字满足有序(比如:小到大)并且是连续存放(数组),那么可以进行二分查找。
二分查找算法

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 NotFound; /*查找不成功,返回-1*/
}

二分查找算法具有对数的时间复杂度O(logN)

二分查找判定树

  • 判定树上每个结点需要的查找次数刚好为该结点所在的层数;
  • 查找成功时查找次数不会超过判定树的深度
  • n个结点的判定树的深度为[logn(2)]+1.
  • 11个元素的二分查找判定树ASL = (44+43+2*2+1)/11 = 3

Updata

什么时候出国读书、什么时候决定做第一份职业、何时选定了对象而恋爱、什么时候结婚,其实都是命运的巨变。只是当时站在三岔路口,眼见风云千樯,你作出抉择的那一日,在日记上,相当沉闷和平凡,当时还以为是生命中普通的一天。

你可能感兴趣的:(数据结构)