zoukankan      html  css  js  c++  java
  • 顺序查找&折半查找

    顺序查找

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

    #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;
    }
    
    
  • 相关阅读:
    DeepFM
    Wide & Deep Learning Model
    机器学习优化方法总结比较(SGD,Adagrad,Adadelta,Adam,Adamax,Nadam)
    svm、logistic regression对比
    梯度下降和EM算法,kmeans的em推导
    牛顿法、拟牛顿法以及与梯度下降法的对比
    【effective c++】构造/析构/赋值运算
    Tips/Tricks in Deep Neural Networks
    GoogLeNet系列解读
    电脑组装的配件及其功能
  • 原文地址:https://www.cnblogs.com/echobiscuit/p/12957903.html
Copyright © 2011-2022 走看看