顺序表的查找

来源:互联网 发布:object-c编程教程网站 编辑:程序博客网 时间:2024/05/08 16:42

查找的定义是:对给定的一个关键字的值,在数据表中搜索出一个关键字的值等于该值的记录或者元素,若找到了指定的元素,则称为查找成功,通常是返回该元素在查找表中的位置;若不存在指定的元素,则返回一个表示失败的值。

查找算法根据存储数据的结构不同可以分为以下三种:顺序表,也就是数组、树表、散列表等

其中,顺序表根据数据元素是否按顺序排序又可以分为:简单顺序查找(数组元素无序)、二分查找(数组有序)


简单顺序查找:

就是从下表1开始依次比较待查找的元素和数组内元素是否相等,若相等,就返回该元素的下表,否则就返回0;

这里将待查找的元素放在b[0]的位置,是为了避免越界的判断,这样可以节省一半的时间


#include <iostream>using namespace std;const int MAX = 10;int seq_search(int b[],int num,int length){    int i = length;    while(b[i] != num)        i--;    return i;}int main(){    int num;    cin>>num;     //要查找的元素    int a[] = {3,1,3,7,4,6,5};    int length = sizeof(a)/sizeof(int);    int b[MAX];    for(int i=0;i<=length;i++){        if(i == 0)            b[i] = num;   //将b[0]默认置为要查找的元素,避免越界判断        else            b[i] = a[i-1];    }    int position = seq_search(b,num,length);    cout<<position<<endl;    //输出元素所在的位置,没找到的话 输出0    return 0;}

二分查找(数组有序):

1.非递归写法

设置三个标号,low,mid,high,发现如果mid对应的值等于待查找的元素的值,返回mid+1;若待查找的元素小于mid对应的值,则从左边开始找;否则从右边开始找

#include <iostream>using namespace std;int bin_search(int *a,int num,int length){    int mid;    int low = 0,high = length-1;    while(low<=high){        mid = (low + high)/2;        if(num == a[mid])   return mid+1;        else if(num < a[mid])   high = mid-1;        else    low = mid+1;    }    return -1;}int main(){    int a[] = {1,2,3,4,5,6,7,8,9};  //供查找的有序表    int length = sizeof(a)/sizeof(int);    int num;  //待查找的元素    cin>>num;    int position = bin_search(a,num,length);    cout<<position<<endl;}

2.递归写法

#include <iostream>using namespace std;int bin_search(int *a,int num,int low,int high){    int mid;    if(low > high)  return -1;    else{        mid = (low + high)/2;        if(num == a[mid])   return mid+1;        else if(num < a[mid])            return bin_search(a,num,low,mid-1);        else            return bin_search(a,num,mid+1,high);    }}int main(){    int a[] = {1,2,3,4,5,6,7,8,9};  //供查找的有序表    int length = sizeof(a)/sizeof(int);    int num;  //待查找的元素    cin>>num;    int position = bin_search(a,num,0,length-1);    cout<<position<<endl;}



0 0
原创粉丝点击