C 搜索算法第一个数字= n

C++ Searching Algorithm for the 1st number =n

本文关键字:数字 第一个 搜索算法      更新时间:2023-10-16

我想要一种算法,该算法与二进制搜索相似的方法,其中我有一个数字 n,假设3,并且一个数组如下:

array[10] = {1,2,3,3,3,3,3,3,3,4,5,6}  

我希望该算法返回p = 2,因为第3个出现在数组的位置2中。

对于此算法,假定数组已经对数组进行排序。

我知道如何使用二进制搜索,但是我不知道如何使其成为数组中的第一个n,而不是它找到的第一个n

查看std :: lower_bound,这似乎是您正在寻找的

http://en.cppreference.com/w/cpp/algorithm/lower_bound

您只需要稍微修改二进制搜索即可获取答案。我已经编写了一个有必要的程序。

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int no,x;
    int A[12345];
    cout<<"Enter no of array elements : ";
    cin>>no;
    cout<<"Enter array elements : ";
    for (int i=0;i<no;i++)
    {
        cin>>A[i];
    }
    cout<<"Enter no to be searched for : ";
    cin>>x;
    int low = 0;
    int high = no-1;
    while(low<high)
    {
        int mid = low + (high-low)/2;
        if (A[mid]>=x)
        {
            high = mid;
        }
        else
        {
            low = mid+1;
        }
    }
    cout<<"Found at : "<<high;
    return 0;
}
# Binary Search First Element function
def BSFE(begin, end, array, num):
    if end-begin <= 1:
        if array[begin] == num:
            return begin
        elif array[end] == num:
            return end
        else:
            return -1
    else: 
        mid = (begin + end) >> 1;
        if array[mid] >= num:
            return BSFE(begin, mid, array, num)
        else:
            return BSFE(mid, end, array, num)
# main
array = [1, 2, 3, 3, 3, 3, 3, 3, 3, 4, 5, 6]
n = 3
print(BSFE(0, len(array)-1, array, n))

在python中写。如果您只知道C ,则可以将其视为伪代码。这就像合并排序的简化版本。