近期在看曾经大一看过的一本书《JAVA开发实战经典》李兴华写的。每看一次曾经看过的书,收获都是不一样的,非常多东西曾经不明确,如今一看恍然大悟的感觉;
这道题目是书上的习题,没给參考答案,我在网上也没找到好点的,就发上来。感觉这个算法还能够优化得更好。希望高手指点
// 在排序好的数组插入一个数字,数字要插入到合适的位置上
int intArr[] = { 11, 22,33, 44, 55, 66, 77};
int insertNum = 34;
//找到要插入的位置
int insertIndex=0;
for (int i = 0; i < intArr.length; i++) {
if(insertNum<intArr[i]){
insertIndex=i;
break;
}
}
//将insertNum放入要插入的位置,然后后面每一个都向后移动一位角标
int intArr1[] =new int[intArr.length+1];
for (int i = 0; i < intArr1.length; i++) {
if(i>=insertIndex){
if(i==insertIndex)//这个仅仅做一次
intArr1[i]=insertNum;
if(i+1<intArr1.length)//i+1会越界。加推断
intArr1[i+1]=intArr[i];
}else{
//插入之前运行,開始运行插入以后就不运行
intArr1[i]=intArr[i];
}
}
//循环输出
for (int i : intArr1) {
System.out.print(i+" ");
}
今天不小心翻看了下。事实上能够用集合做: 可是这道题主要是要练习数组的操作
//用集合做 System.out.println(); Insert(intArr, insertNum); } private void Insert(int[] intArr, int insertNum) { //将数组转成集合 List<Integer> list = new ArrayList<Integer>(); for (int i : intArr) { list.add(i); } list.add(insertNum);//加入元素 Collections.sort(list); //排序集合 System.out.println(list); }