插入排序 渐增型算法 (二)

2014-11-24 11:07:19 · 作者: · 浏览: 1
s.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 N = new ArrayList();
Vector S = new Vector();
LinkedList D = new LinkedList();

for(int i = 0;i N.add(n[i]);
}
for(int i = 0;i S.add(s[i]);
}
for(int i = 0;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);
}
}

/*
* 渐增型算法_插入排序
* 版本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 lis){
Comparable c;
int j = 0;
List t;
for(int i=1;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 N = new ArrayList();
Vector S = new Vector();
LinkedList D = new LinkedList();

for(int i = 0;i N.add(n[i]);
}
for(int i = 0;i S.add(s[i]);
}
for(int i = 0;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);
}
}运行结果:[plain]
[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]

[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:双向排序版本
[java]
/*
* 渐增型算法_插入排序
* 版本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{
public int compare(Comparable x,Comparable y){
return x.compareTo(y);
}
}
// 从大到小
class Less implements Comparator{
public int compare(Comparable x,Comparable y){
return y.compareTo(x);
}
}
public class T01_渐增型算法_插入排序04 {
public static void insertSort(List lis,Comparator comp){
Comparable c;
int j;
List t;
for(int i=1;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