直接插入排序

直接插入排序(Straight Insertion Sort) 的基本操作是將一個記錄插入到已經排好序的有序表中,從而得到一個新的、記錄數增1 的有序表。
這個有點像我們平時玩撲克牌整理牌的過程。隨機抽取8張撲克牌,需要按照從小到大的序列排列,我們一般會從第二張牌開始不斷的與之前的牌進行比較,直接將撲克牌插入到合適的位置。


圖1 直接插入排序

如圖1 所示,
第一輪排序:4, 6 均與比之前的數字大,位置變。當i指正遍歷到0的位置,與之前的數字進行比較,0數字最小直接插入到第一位,1,4,6后移一位。
第二輪排序:當i遍歷到3的位置。3比4,6小,比0,1大。插入到1的后一位,4,6后移。后續步驟以此類推。

代碼實現
//直接插入排序
public static int[] insertSort(int[] a) {
    int i, j;
    //第一位不需要排序,從i=1開始
    for (i=1; i<a.length; i++) {
        int temp = a[i];
        for (j=i-1; j>=0 && temp<a[j]; j--) {
            a[j+1] = a[j];     //記錄后移
        }
        a[j+1] = temp;    //插入到正確位置
    }
    return a;
}

public static void main(String[] args) {
    int[] a = {1, 4 , 6, 0, 3, 2, 5, 9};
    int[] b = insertSort(a);
    System.out.print("Select sort:\n");
    for(int i=0; i<a.length; i++) {
        System.out.print(b[i] + ", ");
    }
}
運行結果:

Select sort:
1, 4, 6, 6, 6, 6, 6, 9,

時間復雜度 O(n^2)

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容