插入排序的基本思想是將乙個記錄插入到已經排好序的有序表中,從而形成乙個新的有序表。對於少量元素的排序,插入排序是乙個有效的演算法。
工作方式像許多人排序一副撲克牌,開始時,我們的左手為空並且桌子上的牌面向下。然後,我們每次從桌子上拿走一張牌並將它插人左手中正確的位置。為了找到一張牌的正確位置,我們從右到左將它與已在手中的每張牌進行比較。這樣拿在左手上的牌總是排序好的,原來這些牌是桌子上牌堆中頂部的牌。
從第乙個元素開始,該元素被認為是已經排好序的。
取下乙個元素,在已經排好序的元素中從後往前掃瞄,如果已排好序的元素大於新元素(待插入的元素),將該元素後移
重複步驟2,直到找到已經排好序的元素小於或等於新元素的位置
將新元素插入到該位置後
重複步驟2,3,4
執行結果
[5, 2, 4, 6, 1, 3]
[2, 5, 4, 6, 1, 3]
[2, 4, 5, 6, 1, 3]
[2, 4, 5, 6, 1, 3]
[1, 2, 4, 5, 6, 3]
[1, 2, 3, 4, 5, 6]
插入排序是穩定的,插入排序適合於資料量小、部分資料有序的情況。
最好情況是序列已經是公升序排列了,在這種情況下,需要進行的比較操作需(n−
1)(n-1)
(n−1
)次即可,此時複雜度為o(n
)o(n)
o(n)
。最壞情況就是序列是降序排列,那麼此時需要進行的比較共有n(n
−1)2
\frac
2n(n−1
)次。插入排序的賦值操作是比較操作的次數加上 (n−
1)(n-1)
(n−1
)次,此時複雜度為o(n
2)o(n^2)
o(n2)。
插入排序的平均時間複雜度為o(n
2)o(n^2)
o(n2)。
插入排序的空間複雜度為o(1
)o(1)
o(1)
碼字不易,您的支援
就是我堅持
下去的動力,一起加油哦。
經典演算法之插入排序
一 基本思路 將乙個待排序的記錄,按照關鍵字大小插入到前面已經拍好的子串行的適當位置,直到全部記錄插入完成為止。如果序列基本有序,效率很高。二 include stdafx.h include includeusing namespace std void swap int a,int b void...
經典演算法之插入排序
問題 有一陣列a,長度為n,把陣列中的元素小到大重新排列。思路 我們把陣列分為已排序和未排序兩部分,把未排序的元素一次乙個插入到已排序部分的合適位置上。已排序部分逐漸增大,直到整個陣列變成有序的。一趟排序 假設從第n個元素開始是無序的,而其前面n 1個元素是有序的。把a n 取出來放入temp中。然...
經典排序演算法 插入排序
插入的排序的原理是每趟將乙個數按照大小插入到它前面已經排好序的子串行中。依次重複,直到插入全部數字。以陣列 3,4,1,2 為例,公升序排列陣列。第一趟從第2個資料開始 第1個數字自己已經有序 跟前面乙個數字比較,如果小於前面數字就將前面數字後移,並繼續向前比較,直到下標小於0為止。如下圖所示 第二...