查找概论1

2014-08-08  本文已影响17人  eesly_yuan

打算复习查找这一章,做点笔记吧

基本概念


顺序表查找


int sequential_search(int *a, int n, int key)
{
     for(int i = 0;i<n;i++)
     {if(a[i]==key) return i;}
     return -1;
}
//上述代码可以进行一定的优化
int sequential_search(int *a, int n, int key)
{
     if(a[0] == key) return 0;
     int temp = a[0];
     a[0] = key;
     int i = n-1;
     while(a[i--]!=key);
     a[0] = temp;
     return i;
}

有序表查找


int binary_search(int *a,int n,int key)
{
     int low = 0,high = n-1,mid;
     while(low<=high)
     {
          mid = (high + low)/2;
          if(key < a[mid])
               high = mid-1;
          else if (key > a[mid])
               low = mid + 1;
          else
               return mid;
     }
     return -1;
}
mid = low + (high-low)*(key - a[low])/(a[high]-a[low]);

1\当key=a[mid]时,查找成功;
2\当key>a[mid]时,新的查找范围是第mid+1个到第high个,范围个数为F[k-2] - 1个
3\当key<a[mid]时,新的查找范围是第low个到第mid-1个,范围个数为F[k-1] - 1个


QQ截图20140807215512.jpg

线性索引查找


稠密索引——每一个记录对应一个索引项,索引项按照关键码有序排序
分块索引——每块对应一个索引项,块内无序,块间有序
倒排索引——根据属性值、次关键码选择记录编号的过程

reference


上一篇 下一篇

猜你喜欢

热点阅读