第一种:依次与有序数组中的每个数进行比较,然后找到位置之后,定义一个新的数组,该信数组的长度加一,再使用system.arraycopy将于数组copy到新数组!import java.util.Arrays;
import java.util.Scanner; public class Sort { public static void main(String[] args) { Scanner in = new Scanner(System.in); int nums[] = new int[10]; System.out.println("请输入一组数字(不超过10个数字):"); for(int i =0 ;i<nums.length;i++){ int j = in.nextInt(); nums[i]=j;} bubblesort(nums); Output(nums); System.out.println("请从键盘输入一个数!"); int a = in.nextInt(); nums=insert(a,nums); System.out.println("插入数字之后的排序为:"); Output(nums); } public static void bubblesort(int [] nums) {//对数组进行冒泡排序 for(int i =0;i<nums.length-1;i++){ for(int j=0;j<nums.length-1-i;j++){ if(nums[j]>nums[j+1]) { int temp = nums[j]; nums[j] =nums[j+1]; nums[j+1]=temp; } } }
} public static int[] insert(int a,int [] nums){//进行插入操作 int index = 0; for(int i = 0;i<nums.length;++i){ if(a>=nums[i]){ index++;} } int[] newArray = new int[nums.length + 1]; newArray[index] = a ; System.arraycopy(nums, 0, newArray, 0 , index ); System.arraycopy(nums, index, newArray, index + 1 , nums.length - index); return newArray ; //返回新数组 } public static void Output(int [] nums){ for(int j = 0;j<nums.length;j++){ System.out.print(nums[j]+" "); } System.out.println(); } }
第二种方法:只是查找时略有不同,是用的是二分查找的思想:
import java.util.Arrays; public class BinaryInsert { public static void main(String[] args) { BinaryInsert bt = new BinaryInsert(); int[] array = new int[]{1 , 3 , 6 , 8, 30 , 49 , 60 , 70 , 83 , 85}; System.out.println(Arrays.toString(array)); array = bt.insert(array , 50); System.out.println(Arrays.toString(array)); } public int[] insert(int[] sortArray , int value){ int index = findInsertIndex(sortArray , value , 0 , sortArray.length); //找到插入位置 int[] newArray = new int[sortArray.length + 1]; newArray[index] = value ; System.arraycopy(sortArray, 0, newArray, 0 , index ); System.arraycopy(sortArray, index, newArray, index + 1 , sortArray.length - index); return newArray ; //返回新数组 } //找到value适合插入的位置 public int findInsertIndex(int[] sortArray , int value , int left , int right){ int middleIndex = (right - left) / 2 + left ; int middleValue = sortArray[middleIndex] ; if(right - left < 2){ if(value > sortArray[right -1 ]) return right; else if(value > sortArray[left]){ return left + 1; }else{ return left; } }else if(middleValue < value){ return findInsertIndex(sortArray , value , middleIndex + 1 , right); }else if(middleValue > value){ return findInsertIndex(sortArray , value , left , middleIndex ); }else{ return middleIndex + 1; } } }
注意与顺序表中个的插入数组进行区别,因为数组的长度是固定的,无法像顺序表那样依次移动元素进行操作!否则会产生数组越界错误!