/* * 渐增型算法_插入排序 * 版本1:整型数组版本 */ import java.util.Arrays; public class T01_渐增型算法_插入排序01 { public static void insertSort(int[] n){ int temp,j; for(int i=1;i<n.length;i++){ j = i-1; temp = n[i]; while(j>=0&&temp<n[j]){ n[j+1] = n[j]; j--; } n[j+1] = temp; } } public static void main(String[] args){ int[] n = {5,1,9,4,6,2,0,3,8,7}; insertSort(n); System.out.println(Arrays.toString(n)); } }运行结果:
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
版本2:可比较类型数组版本
/* * 渐增型算法_插入排序 * 版本2:可比较类型数组版本 */ import java.util.Arrays; public class T01_渐增型算法_插入排序02 { public static void insertSort(Comparable[] c){ int j; Comparable key; for(int i=0;i<c.length;i++){ key = c[i]; j = i-1; while(j>=0&&(c[j].compareTo(key)>0)){ c[j+1] = c[j]; j--; } c[j+1] = key; } } public static void main(String[] args){ Integer[] n = {5,1,9,4,6,2,0,3,8,7}; String[] s = {"ShangHai","HeNan","BeiJing", "AnYang","XinXiang","ChongQing"}; Double[] d = {3.6, 5.3, 2.6, 8.8, 1.5, 9.4}; insertSort(n); insertSort(s); insertSort(d); System.out.println(Arrays.toString(n)); System.out.println(Arrays.toString(s)); System.out.println(Arrays.toString(d)); } }运行结果:
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] [AnYang, BeiJing, ChongQing, HeNan, ShangHai, XinXiang] [1.5, 2.6, 3.6, 5.3, 8.8, 9.4]版本3: 任意可比较类型线性表容器版本
/* * 渐增型算法_插入排序 * 版本3:任意可比较类型线性表容器版本 */ import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.LinkedList; import java.util.Vector; public class T01_渐增型算法_插入排序03 { public static void insertSort(List<Comparable> lis){ Comparable c; int j = 0; List<Comparable> t; for(int i=1;i<lis.size();i++){ c = lis.get(i); j = i-1; while(j>=0&&lis.get(j).compareTo(c)>0){ // lis.set(j+1, lis.get(j)); j--; } //lis.set(j+1, c); t = lis.subList(j+1, i+1); Collections.rotate(t, 1); } } public static void main(String[] args) { Integer[] n = {5,1,9,4,6,2,0,3,8,7}; String[] s = {"ShangHai","HeNan","BeiJing", "AnYang","XinXiang","ChongQing"}; Double[] d = {3.6, 5.3, 2.6, 8.8, 1.5, 9.4}; ArrayList<Integer> N = new ArrayList<Integer>(); Vector<String> S = new Vector<String>(); LinkedList<Double> D = new LinkedList<Double>(); for(int i = 0;i<n.length;i++){ N.add(n[i]); } for(int i = 0;i<s.length;i++){ S.add(s[i]); } for(int i = 0;i<d.length;i++){ D.add(d[i]); } insertSort((List)N); insertSort((List)S); insertSort((List)D); System.out.println(N); System.out.println(S); System.out.println(D); } }运行结果:
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] [AnYang, BeiJing, ChongQing, HeNan, ShangHai, XinXiang] [1.5, 2.6, 3.6, 5.3, 8.8, 9.4]
/* * 渐增型算法_插入排序 * 版本4:任意可比较类型线性表容器版本 */ import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.LinkedList; import java.util.List; import java.util.Vector; // 从小到大 class Greater implements Comparator<Comparable>{ public int compare(Comparable x,Comparable y){ return x.compareTo(y); } } // 从大到小 class Less implements Comparator<Comparable>{ public int compare(Comparable x,Comparable y){ return y.compareTo(x); } } public class T01_渐增型算法_插入排序04 { public static void insertSort(List<Comparable> lis,Comparator comp){ Comparable c; int j; List<Comparable> t; for(int i=1;i<lis.size();i++){ c = lis.get(i); j = i-1; while(j>=0&&comp.compare(lis.get(j), c)>0) j--; t = lis.subList(j+1, i+1); // 得到要移动的部分(lis的子集) Collections.rotate(t, 1); // 把 t 整体向后移动1位,多出来的一位被补到前边 } } public static void main(String[] args) { Integer[] n = {5,1,9,4,6,2,0,3,8,7}; String[] s = {"ShangHai","HeNan","BeiJing", "AnYang","XinXiang","ChongQing"}; Double[] d = {3.6, 5.3, 2.6, 8.8, 1.5, 9.4}; ArrayList<Integer> N = new ArrayList<Integer>(); Vector<String> S = new Vector<String>(); LinkedList<Double> D = new LinkedList<Double>(); for(int i = 0;i<n.length;i++){ N.add(n[i]); } for(int i = 0;i<s.length;i++){ S.add(s[i]); } for(int i = 0;i<d.length;i++){ D.add(d[i]); } insertSort((List)N,new Greater()); // 从小到大 insertSort((List)S,new Less()); // 大->小 insertSort((List)D,new Less()); // 大->小 System.out.println(N); System.out.println(S); System.out.println(D); } }运行结果:
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] [XinXiang, ShangHai, HeNan, ChongQing, BeiJing, AnYang] [9.4, 8.8, 5.3, 3.6, 2.6, 1.5]