【算法一】直接插入

基本思路

在要排序的一組數中,假設前面(n-1) [n>=2] 個數已經是排好順序的,現在要把第n個數插到前面的有序數中,使得這n個數也是排好順序的。如此反覆循環,直到全部排好順序。

代碼實現

  • 遍歷數組,每次循環從第二個數字往前插入
  • 設定插入數和得到已經排好序列的最後一個數的位數。temp和j=i-1
  • 從最後一個數開始向前循環,如果插入數小於當前數,就將當前數向後移動一位
public static void insertSort(int[] data) {
    int temp;
    // 取第i個數,插入前邊的有序的序列
    for(int i = 1;i < data.length; i++){
        temp = data[i];
        int j;
        // 從第i-1的位置上開始比較
        for(j = i - 1; j>=0; j--) {
          // 若前面的數大,則往後挪一位
            if(data[j] > temp) {
                data[j+1] = data[j];
            } else {
              // 否則,說明要插入的數比較大
                break;
            }
        }
        // 找到這個位置,插入數據
        data[j+1] = temp;
    }
}

時間複雜度和空間複雜度

直接插入排序的平均複雜度爲O(n²),最壞時間複雜度:O(n²),空間複雜度:O(1),沒有分配內存。

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