基本查找算法

来源:互联网 发布:河北网络电视台 - 百度 编辑:程序博客网 时间:2024/05/20 02:29

顺序表查找

/** 顺序表查找 */int Sequential_Search(int *a, int n, int key){    int i ;    for (i = 0; i < n; i++) {        if(a[i] == key)            return i;    }    return -1;}/** 顺序表查找改进 */int Sequential_Search(int *a, int n, int key){    int i = n-1;    if(a[0] == key)        return 0;    a[0] = key;    while (a[i] != key) {        i--;    }    if(i == 0)        return -1;    return i;}

有序表查找

/** *  折半查找 */int Binary_Search(int *a,int n, int key){    int low,high,mid;    low = 1;    high = n-1;    while (low <= high) {        mid = (low + high) / 2;        if(key < a[mid])            high = mid - 1;        else if (key > a[mid])            low = mid + 1;        else            return mid;    }    return -1;}
/** *  插值查找:根据要查找的关键字key与查找表中最大最小记录的关键字比较后的查找方法,其核心就在于插值的计算公式(key - a[low])/(a[high] - a[low])。 */int interpolation_Search(int *a,int n, int key){    int low,high,mid;    low = 0;    high = n-1;    while (low <= high) {        mid = low + (high - low) *(key - a[low])/(a[high] - a[low]);//插值        if(key < a[mid])            high = mid - 1;        else if (key > a[mid])            low = mid + 1;        else            return mid;    }    return -1;}

线性索引查找

  • 稠密索引:在线性索引中,将数据集中的每个记录对应一个索引项
  • 分块索引:把数据集的记录分成了若干块,并且这些块需要满足两个条件,块内无序,块间有序。
  • 倒排索引
0 0
原创粉丝点击