插入排序:
通过反复的将某一个特定的值插入到已经排序好的子集中来完成对列表值的排序。排序策略:
1.对列表的头两个值进行排序;2.将第三个值插入到已排序子集的恰当位置;
3.将列表后续的值依次插入到排序子集的恰当位置,直到整个列表排序完成。
例子:
初始:2 8 5 1 3step1: 2 8 5 1 3 (对表头的2 和 8进行排序)
step2: 2 5 8 1 3 (插入5)
step3: 1 2 5 8 3 (插入1)
step4: 1 2 3 5 8 (插入3)
最终:1 2 3 5 8
Code:
/*
*Created on 2016年7月10日
*Copyright 2016 Yong Cai Limited crop. All Rights Reserved
*
*/
package org.cy.sort;
public class InsertionSort {
public static void main(String[] args) {
String[] dataStr = {"cc","yy","gg","aa"};
printArr(insertionSort(dataStr));
}
public static <T extends Comparable<? super T>> T[] insertionSort(T[] data){
for(int index = 1; index < data.length; index++){
T key = data[index];
int pos = index;
while(pos > 0 && data[pos - 1].compareTo(key) > 0){
data[pos] = data[pos - 1];
pos--;
}
data[pos] = key;
}
return data;
}
public static <T> void printArr(T[] data){
int len = data.length;
for(int i = 0; i < len; i++){
System.out.print(data[i] + " ");
}
System.out.println();
}
}