回顧排序演算法之插入排序

2021-08-21 04:22:55 字數 1069 閱讀 3382

插入排序顧明思議就是將目標數插入到已有的有序列表數列中,可能我們本能的會認為是外部資料插入到已有的資料列表中,但是插入排序是可以進行數列內部排序的。核心思想就是將數列裡面的字序列當做已排序的有序數列,然後對後面的資料進行比較移動插入操作。

例項:int arr = ;

第一輪把單獨當做已經排列好的序列把後面的14插入到這個字序列(i=1):

14 < 22 所以會將14儲存到對應的中間變數中,然後將22後移動一位,想在比較結果之前沒資料了,最後將中間變數(14)賦值給22本來的位置

得到陣列

第二輪把單獨當做已經排列好的序列把後面的33插入到這個字序列(i=2):

33>22 所以什麼也不做 得到的結果是

第二輪把單獨當做已經排列好的序列把後面的21插入到這個字序列(i=3):

21<33 所以講21儲存到對應的中間變數中,然後將33後移動一位 得到

21<22 所以將21後移動一位,得到結果是

21>14 所以不用移動,將中間變數(21)插入到22原來的位置,得到

第三輪把單獨當做已經排列好的序列把後面的8插入到這個字序列(i=4):

8<33 所以講8儲存到對應的中間變數中,然後將33後移動一位 得到

8<22 所以將22後移動一位 得到

8<21 所以將21後移動一位 得到

8<14 所以將14後移動一位 得到

14之前沒有資料了,所以將中間變數(8)插入到14原來的位置,得到

**解析:

通過分析得到迴圈的輪數是按照陣列的大小減一判斷的

for(int i=1; i比較的次數是按照目標資料之前的有序目標數列大小決定

for(int j=i-1; j>=0;j--)

綜合**是這樣的:

int temp; //存放需要插入的目標資料

int i,j;

//迴圈輪數

for(i=1; itemp = arr[i];

//移動控制

for(j=i-1; j>=0;j--)else{

break;

if(arr[j+1] != temp){

arr[j+1] = temp;

演算法回顧之插入排序

插入排序 關鍵字 排序 插入法穩定 使用範圍 小規模資料的排序的最佳方案,而且是一種穩定的排序。演算法複雜度 o n2 思想 首先我們來想乙個問題,我們是否能找到一種方法,使乙個數插入到乙個有序的陣列當中,並保證它依然有序呢?那麼,我們又如何將一組無序的數插入到乙個有序的陣列之中,並且保證它依然有序...

排序演算法之插入排序

排序演算法之插入排序 1 插入排序的思想 假設在乙個有序序列中 e 0 e i 1 這i 個元素已經排好序,則當要將第 i 1個元素 e 插入該序列時,只需將第 i 1個元素與從 e 0 開始到e i 1 元素進行比較,當發現第 j個元素 e j 在序列中應在 e 前,且 e j 1 應在e 後時,...

排序演算法之插入排序

排序演算法之插入排序 1 插入排序的思想 假設在乙個有序序列中 e 0 e i 1 這i 個元素已經排好序,則當要將第 i 1個元素 e 插入該序列時,只需將第 i 1個元素與從 e 0 開始到e i 1 元素進行比較,當發現第 j個元素 e j 在序列中應在 e 前,且 e j 1 應在e 後時,...