常見排序算法(1)一一插入排序

插入排序有2種,分別是直接插入排序和希爾排序。

1.直接插入排序:從還沒排序的數組裏取出一個數,插入到已排序的數組裏。

這裏有一個未排序的數組:

在這裏插入圖片描述

那麼具體的排序升序過程(從待排序數組裏取出索引下標從1開始,因爲初始時排好序的數組沒有數字,那麼下標是0的數字就直接放入排好序的數組裏):

第1趟:從未排序的數組取出第一個的數字4,4比1大,直接插入排好序的數組裏;

第2趟:再從未排序的數組取出第一個的數字3,在已排好序的數組裏從後往前找,找到一個比3小的數(數字1),並插入到數字1的後面;

如此重複插入的過程直到排好序。
在這裏插入圖片描述

具體實現代碼如下:
在這裏插入圖片描述

時間複雜度:O(n^2);

空間複雜度:只用到一個臨時空間,所以空間複雜度O(1);

2.希爾排序:希爾排序根據增量d(看情況設置)將待排序的數組分組,每組進行直接插入排序,每次分組排序後,d=d/2,重複分組排序數組,直到d=0結束排序。具體排序:
d=3

第1組數據:1 6 7 排序後:1 6 7

第2組數據:4 5 排序後:4 5

第3組數據:3 2 排序後:2 3

d=1

第1組數據:1 2 3 4 5 6 7 排序後:1 2 3 4 5 6 7

d=0,結束排序。
在這裏插入圖片描述

具體代碼實現:
在這裏插入圖片描述

時間複雜度:不確定,取決於增量d的值;

空間複雜度:只用到一個臨時空間,所以空間複雜度O(1);

其實希爾排序是直接插入排序的升級版,所以整體來看,只要思路清晰,其實插入排序並不難。