原理:
依次取出数据,和左侧的第一个数据进行比较,如果大于左侧数据则停止,如果小于左侧数据则和左侧数据交换位置并接着往左比较直至大于等于左侧数据或者没有左侧数据;
/**
* 插入排序
* @author Youda
*
*/
public class Insertion {
/**
* 将src数组按照升序排序
* @param src
*/
public static void sort(Comparable[] src){
int N = src.length; //数组长度
for(int i=0;i<N;i++){
for(int j=i;j>0 && less(src[j],src[j-1]);j--){
exchange(src,j,j-1);
}
}
}
//比较x是否小于y
public static boolean less(Comparable x, Comparable y){
return x.compareTo(y)<0;
}
//交换 x,y
public static void exchange(Comparable[] src,int x,int y){
Comparable z = src[x]; src[x] = src[y]; src[y] = z;
}
public static void main(String[] args) {
//测试数据
String[] src = {"a","x","z","i","y","o","l","q","b","d","z","s","c"};
Integer[] src1 = {100,99,70,98,99,101,3,6,676,45,25,77,80,1,0,46,28,11111,56666,22,6,8,29};
sort(src); //排序
sort(src1);
for(String str:src){
System.out.print(str+",");
}
System.out.println();
for(int i=0;i<src1.length;i++){
System.out.print(src1[i]+",");
}
}
}
结果: