一、插入排序的原理
将一个记录插入到一个已经排好序的有序表中,从而得到一个新的,记录数增1的新的有序表。从第一个元素开始,先将第一个元素看做一个排好序的子序列,然后从第二个元素开始起,对第二个元素进行插入,之后得到一个两个元素的有序表,然后再对第三个元素进行插入,得到一个三个元素的有序表...,依次类推,直到最后一个元素插入正确,整个序列有序为止。
二、插入排序的伪代码实现
1 INSERTION-SORT(A) 2 for j ← 2 to length[A] 3 do key ← A[j] 4 ▹ Insert A[j] into the sorted sequence A[1 .. j - 1] to generate a new sorted sequence A[1 .. j] 5 i ← j - 1 6 while i > 0 and A[i] > key 7 do A[i + 1] ← A[i] 8 i ← i - 1 9 A[i + 1] ← key
三、插入排序的Java源码实现
1 import java.util.Comparator; 2 3 4 public class InsertSort { 5 6 /** 7 * 泛型方法实现插入排序算法, 8 * 泛型的类型不能是基础类型的,必须得是引用类型的 9 */ 10 public static <T> void insertSort(T[] t, Comparator<? super T> comparator){ 11 T key = t[0]; 12 for(int j = 1; j < t.length; j ++) 13 { 14 key = t[j]; 15 //Insert the t[j] into the sorted sequence t[0, j-1], to generate a new sorted sequence t[0, j] 16 int i = j-1; 17 while(i > -1 && comparator.compare(t[i], key) > 0) 18 { 19 t[i+1] = t[i]; 20 i--; 21 } 22 t[i+1] = key; 23 } 24 } 25 26 /** 27 * @param args 28 */ 29 public static void main(String[] args) { 30 // TODO Auto-generated method stub 31 Integer[] ints = {2, 0, 5, 23, 1, 4, 8, 56, 19}; 32 insertSort(ints, new Comparator<Integer>(){ 33 public int compare(Integer o1, Integer o2){ 34 return o1.intValue() - o2.intValue(); 35 } 36 }); 37 38 for (int i = 0; i < ints.length; i++) 39 { 40 System.out.print(ints[i] + " "); 41 } 42 System.out.println(); 43 } 44 45 }
运行结果:
0 1 2 4 5 8 19 23 56
四、复杂度分析
O(N^2)