插入排序算法是算法排序中的一种;
该算法是假设已有序列是有序序列,从首元素(首元素为单个元素,肯定是有序的...)开始分析,对其他元素的位置进行有序的确定;
以算法为例:
1 public class InsertionSort { 2 public static void insertionSort(int a[]) { 3 //插入排序算法 4 int i,j,key,n=a.length; //key值存储当前比较中最小的值 5 for(j=1;j<n;j++){ 6 key=a[j]; //key<-a[j] 7 i=j-1; //i=j-1表示从当前有序数组最后一个元素开始算 8 while(i>=0&&a[i]>key){ 9 //当还未到达数组的起始并且当前元素大于要插入的数key,则i值与后一位进行交换,并且i值减小 10 //这可以保证大于key的所有元素依次向末尾方向移动一位 11 //保证,key到达的位置前面没有大于key的元素,后面也没有小于key 12 //这就是插入排序算法的思想 13 a[i+1]=a[i]; 14 i--; 15 } 16 a[i+1]=key; 17 } 18 } 19 }
加强版 插入排序算法:
1 public class InsertionSortSecond { 2 public static void insertionSort(Comparable[] a) { 3 int i,j,k,n=a.length; 4 Comparable key; 5 for(j=1;j<n;j++){ 6 key=a[j]; 7 i=j-1; 8 while(i>=0&&(a[i].compareTo(key)>0)){ 9 a[i+1]=a[i]; 10 i--; 11 } 12 a[i+1]=key; 13 } 14 } 15 }
加强版 插入排序:
public class InsertionSortThrid { public static void InsertionSort(List<Comparable> a) { int i, j, n = a.size(); Comparable key; for (j = 1; j < n; j++) { key = a.get(j); i = j - 1; while (i > 0 && a.get(i).compareTo(key) > 0) { a.set(i + 1, a.get(i)); i--; } a.set(i, key); } } }