排序 (插入排序)

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;
    }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章