插入排序 渐增型算法

来源:互联网 发布:艾宾浩斯记忆曲线 知乎 编辑:程序博客网 时间:2024/05/01 21:46
版本1:整型数组版本
/* * 渐增型算法_插入排序 * 版本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:双向排序版本
/* * 渐增型算法_插入排序 * 版本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]







原创粉丝点击