黑马程序员技术交流社区

标题: 数组问题 [打印本页]

作者: 王小刚    时间: 2012-3-25 09:59
标题: 数组问题
怎么在一个有序的数组中插入一个数,要保证这个数给还是有序的。
如有一个数组  int[] arr = {1,4,6,9,10,12,15,17}   插入一个数元素11
    毕老师讲了 可以用拆半方式找到11的位置,我的问题是
位置找到了,但是怎么把这个元素插进去 ,  然后让这个元素后面的元素都往后移,
    要保证形成后的数组 还是有序的。
作者: 刘蕴学    时间: 2012-3-25 10:14
本帖最后由 了无尘 于 2012-3-25 13:34 编辑

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

数组0下标位的1,他的位置是0 到 1之间,即起始位置为0,长度为1
作者: 吴玉辉    时间: 2012-3-25 22:42
假设你通过折半,得到返回值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的值不是就被释放了吗?求高人解答。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2