A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 路边小色狼 于 2013-8-31 14:54 编辑

练习:有一个有序数组,将一个元素插入到数组中且保证数组有序.如何获取该元素在数组中的位置?

    例子:int[] arr={2,4,5,7,19,32,45}; //要将元素8插入数组,要插入数组中的哪个位置?

   思路:if (arr[0]<8)     arr[0]=8; //如果数组第一个元素比8小,那把8赋值给第一个元素,
              然后把数组重新排序,再查找出8所在的位置,加1就是所要的位置;
             如果第一个元素比8还大,那8就放在第一位置。


这样感觉比折半查找的方法容易,可行吗?

评分

参与人数 1技术分 +1 收起 理由
EYE_SEE_YOU + 1

查看全部评分

6 个回复

倒序浏览
本帖最后由 范龙波 于 2013-8-30 19:08 编辑

这么搞性能要比折半慢很多, 按照你的思路走 先对数组排序 , for的循环体要执行n的2次方 次  ,在找数组元素8的索引时, for的循环体又要执行 n次. 这么算你看看哪个性能好
回复 使用道具 举报
题目是:有一个有序数组,将一个元素插入到数组中且保证数组有序。
如何获取该元素在数组中的位置?

题目是有序数组,依次判断数组元素大小,第一个比元素大或者小(对应数组降序和升序)的下标就是元素插入位置,多方便啊,也不用重新排序!
回复 使用道具 举报
月黑风高 发表于 2013-8-30 19:10
题目是:有一个有序数组,将一个元素插入到数组中且保证数组有序。
如何获取该元素在数组中的位置?

确实,你这样更简单
回复 使用道具 举报
范龙波 发表于 2013-8-30 19:00
这么搞性能要比折半慢很多, 按照你的思路走 先对数组排序 , for的循环体要执行n的2次方 次  ,在找数组元素8 ...

有道理,没考虑到执行次数。
回复 使用道具 举报
楼主一定是误解了这个题目的意思了,
这其实就是传说中的插入法排序。
将一个元素插入进去,并保持有序。怎么才能做到呢?第一步是要找到“该插的位置”。然后第二步是插入。。等等的一些后续操作。
所以该问题问的是第一步如何实现,也就是找到该插的位置。(一定要注意找这个位置的目的是为了排序)

像楼主说的,排序后,再找它的位置,还有个毛用啊。
回复 使用道具 举报

如果您的问题已经解决
请更改分类未解决为已解决
保持队形,谢谢合作

详情参考 如何修改分类

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马