查找

827阅读 0评论2012-09-26 Jiker4836
分类:C/C++

查找分为静态查找和动态查找;
静态查找中顺序查找:

点击(此处)折叠或打开

  1. typedef float Keytype;
  2. typedef int Keytype;
  3. typedef char* Keytype;

  4. typedef struct{
  5.                Keytype key;
  6.                ...........
  7.      }Elemtype;

  8. #define EQ(a,b) ((a) == (b))
  9. #define LT(a,b) ((a) < (b))
  10. #define LQ(a,b) ((a) <= (b))

  11. #define EQ(a,b) (!strcmp((a),(b)))
  12. #define LT(a,b) (strcmp((a),(b))<0)
  13. #define LQ(a,b) (strcmp((a),(b))<=0)

  14. 静态查找表中顺序表查找法:
  15. typedef struct{
  16. Elemtype *elem;
  17. int length;
  18. }SStable;

  19. int search_seq(SStable ST,Keytype key)
  20. {
  21. ST.elem[0].key =key;//“哨兵”
  22. for(i=ST.length;!EQ(ST.elem[i].key,key);--i);//从后往前查找;
  23. return i;
  24. }
顺序查找法性能分析:ASL=0.75*(n+1)
有序表查询可以使用折半查找:先确定待查记录所在的范围(区间),然后逐步缩小范围知道找到或找不到该记录为止。

点击(此处)折叠或打开

  1. int search_ban(SStable ST,Keytype key)
  2. {
  3. low=1;high=ST.length;
  4. while(low<=high)
  5. {
  6. mid=(low+high)/2;
  7. if(key==ST.elem[mid].key) return mid;
  8. else if(ST.elem[mid].key <key ) low=mid+1;
  9. else
  10. high=mid-1
  11. }
  12. return 0;
  13. }
什么是好的哈希函数?
若对于关键字集合中任一个关键字,经哈希函数映像到地址集合中任何一个地址的概率是相等,则称此类哈希函数为均匀哈希函数。换句话说就是是关键字经过哈希函数得到一个“随机地址”,以便使一组关键字的哈希地址均匀分布在整个地址区间中,从而减少冲突。
 
 
 
 
 
上一篇:树的概念
下一篇:排序