查找-牛刀小试

来源:互联网 发布:centos 重命名文件夹 编辑:程序博客网 时间:2024/06/05 01:17

查找的基本概念

给定一个值k,在含有n个记录的表中找出关键字等于k的记录。若找到则返回该记录的的位置或信息,否则查找失败,返回相关的指示信息。

(一)顺序查找

思路:
元素没有顺序,因此要扫描整个数组中的所有元素,逐个与k比较
相等则查找成功,返回该元素位置
如果扫描结束没有发现和k相等的元素,返回0

int Search(int a[],int n,int k){    int i;    for(i = 0; i < n; ++i){        if(a[i]==k){            return i;        }    }    return 0;} 

(二)折半查找

要求:
1.线性表必须是有序的
思路:
1.先确定要查找的区间a[low,high]
2.确定中间位置mid
3.将要查找的元素k与中间位置元素a[mid]做比较,若查找成功则返回该位置,否则重新确定查找区间
4.若a[mid]>k,则由表的有序性可知a[mid,…,high]均大于k,若表中存在关键字等于k的记录,则该记录只能在mid的左边,即a[low,…mid-1]
5.同理,若a[mid]

int BSearch(int a[],int low,int high,int k){    int mid;    while(low <= high){        mid = (low + high) / 2;        if(a[mid]==k){            return mid;        }else if(a[mid] > k){//在a[low,mid-1]中找             high = mid - 1;        } else{            low = mid + 1;        }    }    return 0;}

注:代码已通过测试

0 0