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