顺序查找&折半查找

顺序查找

基本流程:从线性表的一端开始,逐一查找满足条件的线性表元素,有则返回元素位置信息,无则返回错误信息。

#include <iostream>

using namespace std;

int seq_search(int arr[], int len, int key)
{
    for(int i = 0 ; i < len ; i++)
    {
        if(arr[i] == key)
        {
            return i;
        }
    }
    return -1;
}

int main()
{
    int arr[] = {1, 2, 3, 4, 5, 6};
    int num = 6;                //可以改为键盘输入,这里就不用了
    int len = sizeof(arr)/sizeof(int);
    int result = seq_search(arr, len, num);
    if(result != -1)
    {
        cout << num << "在数组中的位置是:" << result << endl;
    }
    else
    {
        cout << "未找到对应值。" << endl;
    }
    return 0;
}

顺序查找引入“哨兵”

将数组arr中的末尾(或者首位)元素设置为需要查找的那个值,使得在循环过程中,不需要再判断数组下标是否越界。

#include <iostream>

using namespace std;

int seq_search(int arr[], int key)
{
    arr[7] = key;
    for(int i = 0 ; arr[i] != key ; i++)
    {
        ;
    }
    return i;
}

int main()
{
    int arr[7];
    for(int i = 0; i < 6; i++)
    {
        arr[i] = i;
    }
    int num = 6;                //可以改为键盘输入,这里就不用了
    int result = seq_search(arr, num);
    if(result != 7)
    {
        cout << "The position in the array is: " << result << endl;
    }
    else
    {
        cout << "Can not find the value." << endl;
    }
    return 0;
}

折半查找

折半查找也叫二分查找,用于有序的顺序表。

基本流程是:首先将需要查找的值key与表中间位置元素比较。如果相等,则查找成功并返回存储位置。如果不等,则根据比较信息,将接下来需要查找的区间定位在前半或后半部分,再在相应的部分继续进行以上操作。如此重复直到找到或返回错误信息。

#include <iostream>

using namespace std;

int bin_search(int arr[], int len, int key)
{
    int low = 0;
    int high = len - 1;
    int mid;
    while(low <= high)
    {
        mid = (low + high)/2;
        if(arr[mid] < key)
        {
            low = mid + 1;
        }
        else if(arr[mid] > key)
        {
            high = mid - 1;
        }
        else
        {
            return mid;
        }
    }
    return -1;
}

int main()
{
    int arr[] = {1, 2, 3, 4, 5, 6};
    int result = bin_search(arr, sizeof(arr)/sizeof(int), 4);
    if(result == -1)
    {
        cout << "Can not find the value." << endl;
    }
    else
    {
        cout << "The position in the array is: " << result << endl;
    }
    return 0;
}

posted @ 2020-05-25 17:05  echobiscuit  阅读(225)  评论(0编辑  收藏  举报