问题描述:
通过插入排序,从小到大排序一个数组。
算法实现:
public static void insertSort(int[] arr) { int insertValue; int insertIndex; for(int i = 1; i < arr.length; i++) { insertValue = arr[i]; insertIndex = i - 1; while (insertIndex >= 0 && insertValue < arr[insertIndex]) { arr[insertIndex + 1] = arr[insertIndex]; insertIndex--; } if(insertIndex + 1 != i) { arr[insertIndex + 1] = insertValue; } }}
算法解析:
1.默认数组的第一个元素有序,从第二个元素开始进行“比较-插入”操作;
2.针对待插入的值、待插入的位置设置临时变量;
3.循环遍历,将当前待插入有序数组的值,与“已经有序数组”的元素“从后往前”依次比较;
4.若待插入元素小于“已经有序数组”中的元素,则将“已经有序数组”依次向后移动,直到待插入元素不再小于有序数组中的元素;
5.一轮遍历结束后,若有数据发生移动,需要将待插入值插入到相应位置(当待插入元素不小于“已经有序数组”,则无需移动);
6.每次循环体内容结束,则待插入元素加入“已经有序数组”,当执行完数组最后一个元素的相关“比较-插入”后,整个数组有序。
来源:https://www.cnblogs.com/heibingtai/p/12572028.html