算法思路
把n个待排序的元素看成为一个有序表和一个无序表。开始时有序表中只包含1个元素,无序表中包含有n-1个元素,排序过程中每次从无序表中取出第一个元素,将它插入到有序表中的适当位置,使之成为新的有序表,重复n-1次可完成排序过程。
从小到大的插入排序整个过程如图示:例如初始数列{5,2,4,6,1,3}
比完一次之后还要接着与下一个比较
第一轮:从第二位置的2开始比较,比前面5小,交换位置。
第二轮:第三位置的4比前一位置的5小,交换位置,依次往前比较。
第三轮︰第四位置的6比前一位置的5大,无需交换位置。
第四轮﹔第五位置的1比前一位置的6小,交换位置,再依次往前比较。
第五轮:第六位置的3比前一位置的6小,交换位置,再依次往前比较。
代码实现
public class InsertSort {public static void main(String[] args){int[] arr = {2,6,9,3,1,5,2,4};insertSort(arr);System.out.println(Arrays.toString(arr));}public static void swap(int[] arr,int i,int j){int temp = arr[i];arr[i] = arr[j];arr[j] = temp;}public static void insertSort(int[] arr){for(int i=1;i<arr.length;i++){for(int j=i;j>0;j--){if(arr[j]<arr[j-1]){//交换位置swap(arr,j,j-1);}else{break;}}}}}
算法稳定性︰
如果待排序的序列中存在两个或两个以上具有相同关键词的数据,排序后这些数据的相对次序保持不变,通俗地讲,就是两个相同的数的相对顺序不会发生改变,则该算法是稳定的;插入排序是稳定的排序算法。

