插入排序,顧名思義就是將乙個元素插入到適當的位置。其演算法核心是
1.將第乙個元素看做是個單獨的序列。顯然,只有乙個元素的序列肯定是有序序列。
2.然後將和第二個元素做比較。如果第二個元素小,那麼就將第二個元素插入到第乙個元素前面,這樣我們就得到了乙個擁有兩個元素的有序序列。
3.依次掃瞄剩餘元素,每掃瞄到乙個元素,就將其插入到前面已經排好序的序列中。
4.掃瞄完最後乙個元素,插入到其適當的位置,我們就可以得到乙個完整的有序序列。
上**:
void insertsort(int *a, int n)
} return;
}
複雜度分析
時間複雜度:外層n次迴圈,內層最多有n次迴圈,所以時間複雜度為o(n^2)
空間複雜度:並沒有額外的記憶體使用,所以空間複雜度為o(1)
穩定性分析
在while迴圈裡,如果兩個元素相等並沒有進行交換,所以插入排序是個穩定排序演算法
適用場景分析
插入排序的時間複雜度較高,不適合大數量元素排序。但是當整個序列的大部分元素都是有序的時候,插入排序效果較好。演算法思想和**實現也較為簡單。
排序演算法總結 1 插入排序
主要分為插入排序 交換排序 選擇排序 歸併排序 計數 也有叫分配 排序。一 插入排序。插入排序,就是每次將乙個待排序的物件,插入到乙個有序的資料序列中,得到乙個新容量加1的資料有序序列。如此往復。可分為直接插入排序 二分法插入排序 希爾排序。不同插入方法的區別就是尋找插入位置的方法不同。1 直接插入...
排序演算法總結(三)插入排序
插入排序的原理是從陣列的某個位置開始依次和前面的位置數相比,找到插入位置,將數插入到該位置,這樣多次插入後,得到的將是乙個有序陣列。include using namespace std void insertsort int arrays,int len int main void inserts...
排序演算法總結(3) 插入排序
插入排序是區域性有序的,陣列中有乙個元素被作為標記元素,標記元素的左側是有序的,右側是無序的,即標記元素是無序部分的第乙個元素。此時要求被標記元素出列,且和有序部分的第乙個元素進行比較,若標記元素小於有序部分的最大元素,則最大元素右移到標記元素的位置,標記元素和次大元素繼續比較,直到標記元素大於有序...