知识点1: |
关键码:可以标识一个记录的某个数据项。 键值:关键码的值。 主关键码:可以唯一地标识一个记录的关键码。 次关键码:不能唯一地标识一个记录的关键码。 查找 :在具有相同类型的记录构成的集合中找出满足给定条件的记录。 查找的结果 :若在查找集合中找到了与给定值相匹配的记录,则称查找成功;否则,称查找失败。 静态查找 :不涉及插入和删除操作的查找 。 动态查找 :涉及插入和删除操作的查找。 查找结构 :面向查找操作的数据结构 ,即查找基于的数据结构。(线形表、树表、散列表) |
|
知识点2: |
线性表的查找——顺序查找 设置“哨兵”。免去了在查找过程中每一次比较后都要判断查找位置是否越界,从而提高查找速度。
|
|
顺序查找算法: int SeqSearch(int r[ ], int n, int k) { r[0]=k; i=n; while (r[i]!=k) i --; return i; } |
成功:最好:比较1次;最坏:比较n次 ASL=(n+1)/2 失败:ASL=n+1 |
|
顺序查找适合的存储结构:顺序存储、链接存储 顺序查找对数据元素是否有序没有要求。 |
知识点3: |
线性表的查找——折半查找 |
|
前提条件:1、顺序存储;2、有序序列 |
||
折半查找的思想:
如果k>r[mid] ,右半区找,low=mid+1; 如果k<r[mid],左半区找,high=mid-1; 如果k=r[mid],查找成功 |
||
递归算法: int BinSearch2(int r[ ], int low, int high, int k) { if (low>high) return 0; else { mid=(low+high)/2; if (k<r[mid]) return BinSearch2(r, low, mid-1, k); else if (k>r[mid])
|