类似于打牌,抽牌;
检查第i个数字,如果在它的左边的数字比它大,进行交换,这个动作一直继续下去,直到这个数字的左边数字比它还要小;
/**
* @Descript:插入排序算法
*
* @author LanJonah 2018年2月24日
* @param array
*/
public static void insertionSort(int[] array){
System.out.println("排序数组:"+Arrays.toString(array));
for (int i = 1; i < array.length;i++) {
int tmp = array[i] ;
int j;
for (j=i ;j>0&&tmp<array[j-1];j--) {
array[j] = array[j-1];
System.out.println("移动一次排序结果:"+Arrays.toString(array));
}
array[j]=tmp;
System.out.println("排序结果:"+Arrays.toString(array));
}
System.out.println("排序最终结果:"+Arrays.toString(array));
}
测试:
public static void main(String[] args) {
int[] array = {5,8,3,1,6,5};
insertionSort(array);
}
测试结果:
排序数组:[5, 8, 3, 1, 6, 5]
排序结果:[5, 8, 3, 1, 6, 5]
移动一次排序结果:[5, 8, 8, 1, 6, 5]
移动一次排序结果:[5, 5, 8, 1, 6, 5]
排序结果:[3, 5, 8, 1, 6, 5]
移动一次排序结果:[3, 5, 8, 8, 6, 5]
移动一次排序结果:[3, 5, 5, 8, 6, 5]
移动一次排序结果:[3, 3, 5, 8, 6, 5]
排序结果:[1, 3, 5, 8, 6, 5]
移动一次排序结果:[1, 3, 5, 8, 8, 5]
排序结果:[1, 3, 5, 6, 8, 5]
移动一次排序结果:[1, 3, 5, 6, 8, 8]
移动一次排序结果:[1, 3, 5, 6, 6, 8]
排序结果:[1, 3, 5, 5, 6, 8]
排序最终结果:[1, 3, 5, 5, 6, 8]