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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王小刚 中级黑马   /  2012-3-25 09:59  /  2169 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

怎么在一个有序的数组中插入一个数,要保证这个数给还是有序的。
如有一个数组  int[] arr = {1,4,6,9,10,12,15,17}   插入一个数元素11
    毕老师讲了 可以用拆半方式找到11的位置,我的问题是
位置找到了,但是怎么把这个元素插进去 ,  然后让这个元素后面的元素都往后移,
    要保证形成后的数组 还是有序的。

2 个回复

倒序浏览
本帖最后由 了无尘 于 2012-3-25 13:34 编辑

使用arraycopy
System.arraycopy(源数组,起始位置,目标数组,起始位置,复制的长度)
有个需要注意的是,这里的起始位置
比如
0   1    2   3
{ 1 , 2 ,  3}

数组0下标位的1,他的位置是0 到 1之间,即起始位置为0,长度为1
回复 使用道具 举报
假设你通过折半,得到返回值mid,
public static void agaArray(int[] arr)//将得到的数值插入,并重新排列数组。
        {
               
                for(int x=0;x<arr.length+1;x++)
                {
                        if(x==mid)
                        {
                                arr[x]=11;
                                        x++;
                        }

                }
        }
我觉得思想应该是:得到插入角标后,重新遍历数组循环;但由于数组多插入了一个元素,所以数组长度需变为array.length+1;在遍历数组时,只需要判定条件将所得的角标的数组位置赋值为插入数值,之后的角标+1即可。数组本身已经是有序数组,正常对数组遍历就可以了。可话说怎么获得mid 的返回值呢?在return语句结束后,mid的值不是就被释放了吗?求高人解答。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马