社区
C++ 语言
帖子详情
一个无序的数组,有什么高效率的查找算法?
SHHMing
2008-11-13 02:55:05
一个无序的数组
比如
int a[3000]
要在里面查num1和num2的索引,
有什么好的方法
前提是数组无序,不考虑排序后再去查
,有什么高效率的算法吗?
方法一:
从a[0]开始查,查到num1或num2后,接着查另外一个没查到的
方法二:
同时从头尾向中间查,这个似乎效率更加高点
有什么好方法么
...全文
2448
23
打赏
收藏
一个无序的数组,有什么高效率的查找算法?
一个无序的数组 比如 int a[3000] 要在里面查num1和num2的索引, 有什么好的方法 前提是数组无序,不考虑排序后再去查 ,有什么高效率的算法吗? 方法一: 从a[0]开始查,查到num1或num2后,接着查另外一个没查到的 方法二: 同时从头尾向中间查,这个似乎效率更加高点 有什么好方法么
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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)
Java集合
Java的集合类是一种特别有用的工具类,它可以用于存储数量不等的多个对象,并可以实现常用数据结构,如栈,队列等,除此之外,Java集合还可用于保存具有映射关系的关联
数组
。 Java的集合大致上可分为:Set,List和Map三种体系,其中Set代表
无序
,不可重复的集合;List代表有序,重复的集合,而Map则代表具有映射关系的集合。Queue体系集合,代表一种队列集合实现。 Java集合就像是
一个
容器,我们可以把多个对象(实际上是对象的引用,习惯上叫对象,)保存到集合容器中。在JDK1.5以前Java集合会丢失容器中所有对象的数据类型,把所有对象都当初object对象来处理,JDK1.5以后增加了泛型,Java集合可以记住容器中对象的数据类型。从而可以编写出更简洁,健壮的代码。
在
无序
数组
中如何
查找
指定值的位置(索引)及
算法
优化
数组
元素
查找
无序
查找
线性
查找
无序
数组
的二分
查找
法
二分
查找
法本来是为了在处理
一个
巨大
数组
时减少运算量,提
高效率
,比如在40多亿个数据中找数,运用二分
查找
只需要三十几次就够了,这比逐一排查快得多的多。但如果是一串很长的
无序
数组
,仅排序的运算量就比逐一排查...
数据结构-有序
数组
和
无序
数组
(2)缺点:删除和插入慢,大小固定(缺点也显而易见,当插入
一个
元素时,首先要判断该元素应该插入的下标,然后对该下标之后的所有元素后移一位,才能进行插入,这无疑增加了很大的...* 生成
一个
无序
的
数组
或有序
数组
。
你真的会写
无序
数组
中位数的
查找
算法
吗?PriorityQueue的妙用
中位数(又称中值,英语:Median),统计学中的专有名词,代表
一个
样本、种群或概率... 面试时,大家是不是经常被问到,怎么求
一个
无序
数组
(长度为n)的中位数? 面试官:知道什么是中位数吗? ...
C++ 语言
64,647
社区成员
250,491
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章