C 搜索算法第一个数字= n
C++ Searching Algorithm for the 1st number =n
我想要一种算法,该算法与二进制搜索相似的方法,其中我有一个数字 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 ,则可以将其视为伪代码。这就像合并排序的简化版本。
相关文章:
- 为什么它只打印双链接列表的第一个值,而我的程序却崩溃了
- std::find,返回所有找到的值的替代方法,而不仅仅是存在重复的向量的第一个值
- 如何仅读取文本文件中的第一个值
- 在C++中,如何在第一个"system()"结束后执行第二个"system()"?
- 查找不在标准中的第一个值::设置<int>最小-最大值
- C++:忽略第一个 cin.ignore 之后的输入
- 在C++中打印多个矢量的第一个值
- C++去除前x个元素的有效方法,在不改变向量大小的情况下将第x+1个元素推到第一个
- C++第一个cout将不会打印
- 我们可以在第一个else-if条件结束后使用另一个else-if条件吗
- 我必须更改我的数字最后一个数字和第一个数字,但不要使用仅带有整数或循环的函数.例如从 12345 到 52341
- OpenGL:第二个VBO破坏了第一个VBO
- 将一个数字拆分为多个数字,每个数字只有一个有效位
- 为什么第一个Dynamic_cast没有投射到基类?
- OpenGL 2D游戏只绘制第二个精灵纹理而不是第一个
- C++ 为什么程序只读取第一个值
- 在我的第一个C++程序中需要一些帮助(简单)
- 为什么我的代码在第一个 if 语句处中断?
- 是否可以从另一个类对象调用一个类函数而不继承第一个类
- 在将字符串转换为整数后,是否有一种方法可以保持数字的第一个零