在排序好的数组插入一个数字,数字要插入到合适的位置上

    

近期在看曾经大一看过的一本书《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); 
	}


 

原文地址:https://www.cnblogs.com/claireyuancy/p/6753760.html