4.1 算法的目标
对数组按照升序/降序进行排序
4.2 算法的思想步骤
以插入的方式寻找该元素的适当位置
把n个待排序的元素看成一个有序表和一个无序表,开始时有序表只含有一个元素,无序表有n-1个元素,排序过程中每次从无序表取出第一个元素,把它按照升序/降序的需求与有序表的元素进行比较,并插入到有序表的适当位置。
4.3 算法的具体步骤
以数组[5,8,6,3,9,2,1,7]为例,共需进行length-1次排序
此时有序数组为空,无序数组为[5,8,6,3,9,2,1,7]
step1:依次遍历无序数组,将无序数组的第i个元素放入到有序数组中
此时有序数组为空,则直接将元素num[0]=5,放入,得到有序数组为[5]
step2:依次遍历无序数组,将无序数组的第i个元素放入到有序数组中
当前元素num[1]=8;有序数组为[5]
此时有序数组不为空,将当前元素与有序数组从右到左(从右到左为有序数组的从大到小)进行比较:
如果当前元素小于有序数组的值,则将有序数组元素值赋值到当前元素的位置,然后向前进行继续比较;
如果当前元素大于有序数组的值,则将其插入到有序数组的指定位置。
step3:依次遍历无序数组,将无序数组的第i个元素放入到有序数组中
当前元素nun[i]=6,有序数组为[5,8]
将当前元素插入到有序数组的指定位置,得到有序数组为[5,6,8]
step4:依次遍历无序数组,将无序数组的第i个元素放入到有序数组中
当前元素nun[i]=3,有序数组为[5,6,8]
将当前元素插入到有序数组的指定位置,得到有序数组为[3,5,6,8]
……
……
……
直至排序结束,完成插入排序!!!
/*** 插入排序* @param nums*/public static void sort(int[]nums){//把数组nums看成一张有序表和无序表//排序过程中每次从无序表中取出一个元素,把他按照次序与有序表的数进行比较,并插入到有序表的适当位置//总共需要排序的次数for (int i = 0; i < nums.length-1; i++) {//先将当前的值和对应的下标索引保存起来int indexValue=nums[i],index=i-1;//将当前元素按照次序与有序表的数进行比较,并插入到有序表的适当位置while (index>=0&&nums[index]>indexValue){nums[index+1]=nums[index];index--;}nums[index+1]=indexValue;System.out.print("第"+i+"次排序结果为:");System.out.println(Arrays.toString(nums));}}

