社区
C++ 语言
帖子详情
一个无序的数组,有什么高效率的查找算法?
SHHMing
2008-11-13 02:55:05
一个无序的数组
比如
int a[3000]
要在里面查num1和num2的索引,
有什么好的方法
前提是数组无序,不考虑排序后再去查
,有什么高效率的算法吗?
方法一:
从a[0]开始查,查到num1或num2后,接着查另外一个没查到的
方法二:
同时从头尾向中间查,这个似乎效率更加高点
有什么好方法么
...全文
2846
23
打赏
收藏
一个无序的数组,有什么高效率的查找算法?
一个无序的数组 比如 int a[3000] 要在里面查num1和num2的索引, 有什么好的方法 前提是数组无序,不考虑排序后再去查 ,有什么高效率的算法吗? 方法一: 从a[0]开始查,查到num1或num2后,接着查另外一个没查到的 方法二: 同时从头尾向中间查,这个似乎效率更加高点 有什么好方法么
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
23 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
xiaoshu666
2012-06-27
打赏
举报
回复
那么,遍历查找和,排序后查找那个效率高???
SHHMing
2008-11-14
打赏
举报
回复
谢谢各位,我想明白了,一回事,呵呵
weekly123
2008-11-13
打赏
举报
回复
就是老老实实遍历吧,没别的办法
dreamer_shax
2008-11-13
打赏
举报
回复
[Quote=引用 19 楼 BaihowFF 的回复:]
引用 16 楼 dreamer_shax 的回复:
1,方法1和方法2没有什么区别,效率也一样
同时从两头找肯定是用到多线程,那我用3000个线程,只要比较1次就行了?
2,楼上讨论的一次比较2次,和一次比较一次,也没有本质区别,效率也一样
证明:假设Num1的索引是p1,Num2的索引是p2,假设p1 <p2
则一次比较2次,比较次数为 2*p1 + (p2-p1) = p1+p2;
一次比较1次的比较次数为 p1 + p2
-----------------------
我…
[/Quote]
呵呵,楼上的很对,可是讨论算法效率的时候,加入多线程没有什么意义。我是从这个角度来说2个方法没什么区别。实际运行的时候肯定是多线程快啦。
BaihowFF
2008-11-13
打赏
举报
回复
[Quote=引用 16 楼 dreamer_shax 的回复:]
1,方法1和方法2没有什么区别,效率也一样
同时从两头找肯定是用到多线程,那我用3000个线程,只要比较1次就行了?
2,楼上讨论的一次比较2次,和一次比较一次,也没有本质区别,效率也一样
证明:假设Num1的索引是p1,Num2的索引是p2,假设p1 <p2
则一次比较2次,比较次数为 2*p1 + (p2-p1) = p1+p2;
一次比较1次的比较次数为 p1 + p2
-----------------------
我的观点:
如果是一个乱序数组,…
[/Quote]
不对...
多线程其实可以加快速度...但是次数不会少只会多...
就拿两个线程说说吧...
可以把3000个数分两组...同时进行查找...
我有双核CPU...可以同时跑两个线程...所以在相同时刻可以多做一倍的事情...(但实际上没有这么快...那是intel的事情)
所以多线程是有道理的..如果有4线程或者8线程的cpu...将数组细分...肯定是会得到性能提升...就算法而言...效率一样...
0黄瓜0
2008-11-13
打赏
举报
回复
1,方法1和方法2没有什么区别,效率也一样
同时从两头找肯定是用到多线程,那我用3000个线程,只要比较1次就行了?
---------------
多线程不要滥用,线程的开销是很大的。
0黄瓜0
2008-11-13
打赏
举报
回复
多核时代,充分利用每一个cpu。 也就是把数组分为几部分,使用多线程一齐查找。
dreamer_shax
2008-11-13
打赏
举报
回复
1,方法1和方法2没有什么区别,效率也一样
同时从两头找肯定是用到多线程,那我用3000个线程,只要比较1次就行了?
2,楼上讨论的一次比较2次,和一次比较一次,也没有本质区别,效率也一样
证明:假设Num1的索引是p1,Num2的索引是p2,假设p1<p2
则一次比较2次,比较次数为 2*p1 + (p2-p1) = p1+p2;
一次比较1次的比较次数为 p1 + p2
-----------------------
我的观点:
如果是一个乱序数组,没有任何其他信息,还是老老实实遍历吧
羽盛
2008-11-13
打赏
举报
回复
SHHMing : 方法一最多要循环3000次
方法二最多要循环1500次就可以了啊
我还是不太明白,这两个方法效果真的一样么?
循环语句的执行基本不会不会影响效率, 关键是循环里才操作。 方法1,2比较的次数是一样的。
BaihowFF
2008-11-13
打赏
举报
回复
[Quote=引用 10 楼 SHHMing 的回复:]
引用 7 楼 BaihowFF 的回复:
引用 5 楼 SHHMing 的回复:
引用 1 楼 BaihowFF 的回复:
都无序数组了...这两个方法其实效率是一样的...
为什么一样???
因为无序啊...所以每个你期望的数字出现在任何地方的概率都是n分之1...
方法一最多要循环3000次
方法二最多要循环1500次就可以了啊
我还是不太明白,这两个方法效果真的一样么
[/Quote]
但是你循环虽然减半了...但是里面会多出另外两个if语句啊...
如果是3000个数...你不想循环显然也是可以的...写3000组语句就可以了...这样在效率上基本没有区别...
hai040
2008-11-13
打赏
举报
回复
或者一边找一边排序
第一次查找x可以把数组分成3部份,<=x/>x/未知
第二次查找就可以缩小范围,再把数组分细
SHHMing
2008-11-13
打赏
举报
回复
我现在的需求就是
一个无序的数组
int a[3000]
里面查num1和num2的索引,就是查两个的索引,不考虑3个,4个等等
我想看看有什么比方法一要效率好的方法
还有方法一二为什么效果一样,我有点想不明白,请指教啊
hai040
2008-11-13
打赏
举报
回复
排序后再查
SHHMing
2008-11-13
打赏
举报
回复
[Quote=引用 7 楼 BaihowFF 的回复:]
引用 5 楼 SHHMing 的回复:
引用 1 楼 BaihowFF 的回复:
都无序数组了...这两个方法其实效率是一样的...
为什么一样???
因为无序啊...所以每个你期望的数字出现在任何地方的概率都是n分之1...
[/Quote]
方法一最多要循环3000次
方法二最多要循环1500次就可以了啊
我还是不太明白,这两个方法效果真的一样么
lann64
2008-11-13
打赏
举报
回复
[Quote=引用 5 楼 SHHMing 的回复:]
引用 1 楼 BaihowFF 的回复:
都无序数组了...这两个方法其实效率是一样的...
为什么一样???
[/Quote]
除非象楼上说的,你是多线程的,否着从哪开始对无序数组,只能是撞大运,基本上都应该是O(n) 复杂度。最坏情况也都是完全遍历一遍。
SHHMing
2008-11-13
打赏
举报
回复
[Quote=引用 6 楼 lann64 的回复:]
方法1不可取,那要遍历两遍。
如果就找两个目标,用不着先查一个,找到了再找第二个。可以一起找,每次比较两次。要是找M个,那还是先排序吧。
至于是从头开始,还是从两端开始,对无序数组没有效果。
[/Quote]
我是仅仅遍历一遍,一次比两个
循环次数取决于靠后的一个
BaihowFF
2008-11-13
打赏
举报
回复
[Quote=引用 5 楼 SHHMing 的回复:]
引用 1 楼 BaihowFF 的回复:
都无序数组了...这两个方法其实效率是一样的...
为什么一样???
[/Quote]
因为无序啊...所以每个你期望的数字出现在任何地方的概率都是n分之1...
lann64
2008-11-13
打赏
举报
回复
方法1不可取,那要遍历两遍。
如果就找两个目标,用不着先查一个,找到了再找第二个。可以一起找,每次比较两次。要是找M个,那还是先排序吧。
至于是从头开始,还是从两端开始,对无序数组没有效果。
SHHMing
2008-11-13
打赏
举报
回复
[Quote=引用 1 楼 BaihowFF 的回复:]
都无序数组了...这两个方法其实效率是一样的...
[/Quote]
为什么一样???
elephont9527
2008-11-13
打赏
举报
回复
无序数组,从那儿开始都一样,何来优化一说
除了老老实实一个个找,没有任何办法
加载更多回复(3)
《数据结构
算法
实现及解析(高一凡)源代码
《数据结构
算法
实现及解析(高一凡)源代码
无序
数组
的二分
查找
法
我是
一个
只学了两个月C语言的小白,刚开始学指针。老师上课讲“二分
查找
”的时候强调只能用于有序
数组
,课后我本着巩固知识的态度自己写了一遍二分
查找
的代码,并思考能否对
无序
数组
进行排序操作后,用二分
查找
法找到目标数,并找到它在
无序
数组
中的下标。但这样就违背了二分
查找
法的初衷。二分
查找
法本来是为了在处理
一个
巨大
数组
时减少运算量,提
高效率
,比如在40多亿个数据中找数,运用二分
查找
只需要三十几次就够了,这比逐一排查快得多的多。但如果是一串很长的
无序
数组
,仅排序的运算量就比逐一排查要多,效率更低。
在
无序
数组
中如何
查找
指定值的位置(索引)及
算法
优化
数组
元素
查找
无序
查找
线性
查找
数组
常见
算法
数组
常见
算法
无序
(未排序)
数组
二分
查找
二分
查找
也称折半
查找
(Binary Search),它是一种效率较高的
查找
方法。但是,折半
查找
要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列。但是对于
无序
数组
,我们可以先排序在二分,但还有一种技巧就是结合快排的思想,即每次选择
一个
关键字,先将比他大的数放在其右边,比他小的数放在其左边,然后比较他和要
查找
的数的关系,并选择下次迭代的区间。public class BinarySearc...
C++ 语言
65,182
社区成员
250,527
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章