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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© wuerbuzuo 中级黑马   /  2015-1-30 16:13  /  1584 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

看到基础视频 054_数组(折半查找)_黑马程序员_Java基础视频
里面有道测试题讲的是在一个有序的数组中插入新元素,新的数组仍是有序的。
老师讲了用折半查找的方法找出需要插入的位置,但是却没有讲要怎么插入。
请问要怎么插入呢?插入后新数组长度+1,新元素后面的每个角标都要+1

评分

参与人数 1技术分 +1 收起 理由
杨佳名 + 1

查看全部评分

9 个回复

倒序浏览
从插入位置后的元素都向后移一位!!
回复 使用道具 举报
边晓炎 发表于 2015-1-30 16:17
从插入位置后的元素都向后移一位!!

思路我是知道的 就是代码实现不知道怎么写
回复 使用道具 举报
wuerbuzuo 发表于 2015-1-30 16:52
思路我是知道的 就是代码实现不知道怎么写

晚上回去写一个!明天给你!!
回复 使用道具 举报
数组是不可变长度的,你如果要插入就从新建立一个数组把原数组的元素复制进去,复制的过程中把要插入的元素添加到他的位置 他后面的元素向后顺延, 可变长度数组的原理就是从新建立一个数组,并不是在原有的数组里插入,数组长度不可变

点评

同意本楼的!  发表于 2015-1-31 15:39

评分

参与人数 1技术分 +1 收起 理由
杨佳名 + 1

查看全部评分

回复 使用道具 举报
数组在被创建的时候必须要给定长度,不然就会报缺少数组维,所以数组在创建的时候长度就确定下来了不能改的
回复 使用道具 举报
等你到后面就知道了,后面有讲集合的部分,数组的长度是固定的不能改变,将数组变成集合就可以操作里面的元素了。慢慢往后面看,这些都是小问题
回复 使用道具 举报
xiaoyi 中级黑马 2015-1-31 13:40:00
8#
就是新建一个比原来的数组长一的新数组,你得到下标后在那判断一下就可以了
回复 使用道具 举报
边晓炎 发表于 2015-1-30 17:15
晚上回去写一个!明天给你!!
  1. package Array;
  2. public class InsertArray
  3. {
  4.         public static int[] newArr(int[] arr, int value)
  5.         {
  6.                 int mid = insertArr(arr, value);
  7.                 int[] arrs = new int[arr.length+1];
  8.                 for(int i=0;i<arr.length;i++)
  9.                 {
  10.                         if(mid==i)
  11.                         {
  12.                                         arrs[i] = arr[i];
  13.                                         arrs[i+1] = value;
  14.                         }
  15.                         else
  16.                         {
  17.                                 if(i>mid)
  18.                                 {
  19.                                         arrs[i+1] =  arr[i];
  20.                                 }
  21.                                 else
  22.                                 {
  23.                                         arrs[i] = arr[i];
  24.                                 }
  25.                         }
  26.                 }
  27.                 return arrs;
  28.         }
  29.         public static int insertArr(int[] arr,int value)
  30.         {
  31.                 int min = 0;
  32.                 int max = arr.length-1;
  33.                 int mid = 0;
  34.                 while(min<max)
  35.                 {
  36.                         mid = (max+min)/2;
  37.                         if(arr[mid]<value)
  38.                                 min = mid+1;       
  39.                         else if(arr[mid]>value)
  40.                                 max = mid-1;
  41.                         else
  42.                                 return mid;
  43.                 }
  44.                 return mid=min;
  45.         }
  46.         public static void main(String[] args)
  47.         {
  48.                 int[] arr = {1,2,7,9,12,21,22};
  49.                 for(int i=0;i<arr.length;i++)
  50.                 {
  51.                         if(i==0)
  52.                                 System.out.print("插入前的数组:"+"{");
  53.                         if(i==arr.length-1)
  54.                                 System.out.println(arr[i]+"}");
  55.                         else
  56.                                 System.out.print(arr[i]+",");
  57.                 }
  58.                 int[] arrs = newArr(arr, 19);
  59.                 for(int i=0;i<arrs.length;i++)
  60.                 {
  61.                         if(i==0)
  62.                                 System.out.print("插入后的数组:"+"{");
  63.                         if(i==arrs.length-1)
  64.                                 System.out.println(arrs[i]+"}");
  65.                         else
  66.                                 System.out.print(arrs[i]+",");
  67.                 }
  68.         }
  69. }
复制代码

评分

参与人数 1技术分 +2 收起 理由
杨佳名 + 2

查看全部评分

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