插入排序 一步一步演算法篇

2021-07-11 17:51:01 字數 1298 閱讀 2219

插入排序

演算法思想:將待排序的資料放在乙個陣列中,並設定乙個中間量m,用來儲存每次插入比較的元素。

(1) a[1]自成1個有序區,無序區為a[2..n];

(2) 從i=2起直至i=n為止,將a[i]放在恰當的位置,使a[1..i]資料序列有序;

① m:=a[i];

② 將m與前i-1個數比較 , j:=i-1; while(x

#include

#include

#include

#include

using

namespace

std;

int main()

a[j+1]=m; //將a[i]插入有序區

}for (i=1;i<=n;i++) cout

return

0;}

關於複雜度:如果目標是把n個元素的序列公升序排列,那麼採用插入排序存在最好情況和最壞情況。

最好情況就是,序列已經是公升序排列了,在這種情況下,需要進行的比較操作需(n-1)次即可。

最壞情況就是,序列是降序排列,那麼此時需要進行的比較共有n(n-1)/2次。插入排序的賦值操作是比較操作的次數加上(n-1)

。平均來說插入排序演算法的時間複雜度為o(n^2)

因而,插入排序不適合對於資料量比較大的排序應用。

但是,如果需要排序的資料量很小,例如,量級小於千,那麼插入排序還是乙個不錯的選擇。

關於穩定性:入排序是在乙個已經有序的小序列的基礎上,一次插入乙個元素。當然,剛開始這個有序的小序列只有1個元素,就是第乙個元素。比較是從有序序列的末尾開始,也就是想要插入的元素和已經有序的最大者開始比起,如果比它大則直接插入在其後面,否則一直往前找直到找到它該插入的位置。如果碰見乙個和插入元素相等的,那麼插入元素把想插入的元素放在相等元素的後面。

所以,相等元素的前後順序沒有改變,從原無序序列出去的順序就是排好序後的順序,所以插入排序是穩定的。

一步一步演算法篇

一步一步寫演算法(之堆排序)

堆排序是另外一種常用的遞迴排序。因為堆排序有著優秀的排序效能,所以在軟體設計中也經常使用。堆排序有著屬於自己的特殊性質,和二叉平衡樹基本是一致的。打乙個比方說,處於大堆中的每乙個資料都必須滿足這樣乙個特性 1 每乙個array n 不小於array 2 n 2 每乙個array n 不小於array...

一步一步寫演算法(之快速排序)

快速排序是程式設計中經常使用到的一種排序方法。可是很多朋友對快速排序有畏難情緒,認為快速排序使用到了遞迴,是一種非常複雜的程式,其實未必如此。只要我們使用好了方法,就可以自己實現快速排序。首先,我們複習一下,快速排序的基本步驟是什麼 1 判斷輸入引數的合法性 2 把陣列的第乙個資料作為比較的原點,比...

一步一步寫演算法 之快速排序

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!快速排序是程式設計中經常使用到的一種排序方法。可是很多朋友對快速排序有畏難情緒,認為快速排序使用到了遞迴,是一種非常複雜的程式,其實未必如此。只要我們使用好了方法,就可以自己實現快速排序。首先,我們複習一下,快速排序的基本步驟是什麼 1 判斷輸入引...