1.算法描述:如對數組進行插入排序,將數組分隔成兩部分,一部分爲有序,初始始僅有數組中的第一項;另外一部分爲待排序,算法從待排序中移走第一項,插入的有序部分合適位置。
圖示意:
默認初始有序爲第一個位置,如2,待排序爲6,5,8,3;選擇待排序第一個元素6,6比2大,所以不移動,有序部分便成爲2,6 待排序部分爲5,8,3 選擇5和有序部分比較,找到合適位置,把後面的元素往後移動。
Java語言實現:
public static <T extends Comparable<? super T>> void insertionSort(T[] a,int first,int last){ if(first < last){ insertionSort(a,first,last-1); insertInOrder(a[last],a,first,last-1); } } /** * 每次遞歸調用都使end減1,直到最後end等於begin * @param t * @param a * @param begin * @param end * @param <T> */ private static <T extends Comparable<? super T>> void insertInOrder(T t,T[] a,int begin,int end){ //將元素插入到有序數組項a[begin]到a[end]中 //如果當前元素大於等於a[end],在a[end]後面直接插入 if(t.compareTo(a[end]) > 0){ a[end+1] = t; }else if(begin < end){ //當前元素比a[end]元素小,a[end]往後移 a[end + 1] = a[end]; //遞歸調用,end減1 insertInOrder(t,a,begin,end-1); }else { a[end + 1] = a[end]; a[end] = t; } }