插入排序 渐增型算法

版本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]






 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值