插入排序
2017-03-31 16:14
155 查看
插入排序
插入排序不是通过交换位置达到排序的目的,而是通过比较找到合适的位置,然后插入元素,来达到排序的目的的。类似于打扑克牌,特别是牌数较大的。在分牌时可能要整理自己的牌,牌多的时候怎么整理呢?就是拿到一张牌,找到一个合适的位置插入。这个原理其实和插入排序是一样的。
举个例子,对
<5,3,8,6,4>这个无序序列进行简单插入排序,首先假设第一个数的位置时正确的,即在拿到第一张牌的时候,没必要整理。然后3要插到5前面,把5后移一位,变成3,5,8,6,4.想一下整理牌的时候应该也是这样吧。然后8不用动,6插在8前面,8后移一位,4插在5前面,从5开始都向后移一位。
具体代码如下:
package com.test; import java.util.Arrays; public class InsertSort { public static void main(String[] args) { int[] arr = { 8, 3, 4, 5, 2, 3, 0, 33, 1 }; insertSort(arr); } public static void insertSort(int[] arr) { if (arr.length == 0 || arr == null) { return; } for (int i = 1; i < arr.length; i++) { int target = arr[i];//待插入的元素 int j = i;//给一个从后面能把目标元素插入的具体位置的指针 //找到合适位置之前,把目标大的元素后移 while (j > 0 && arr[j-1] > target) { arr[j] = arr[j-1]; j--; } arr[j] = target;//将目标放在合适的位置 System.out.println(Arrays.toString(arr)); } } }
结果如图: