把插入排序表示為如下的乙個遞迴過程:為了排序a[1…n],我們遞迴的排序a[1…n-1],然後把a[n]插入到a[1…n-1]中。
c語言實現:
#include
#include
void
insert
(int
*arraya,
int num)
arraya[i+1]
=key;
}//num: 0-n-1
void
insertsort
(int
*arraya,
int num)
}int
main()
;insertsort
(a,7);
//插入排序八個數字
int i;
for(i=
0;i<
8;i++
)}
n=2時 f(n
)=
1f(n)=1
f(n)=1
n>2時:當a[n]比a[1…n]中任何乙個數字都小的時候,此時是最壞情況。n-1個數字移動,加乙個插入操作。
f (n
)=f(
n−1)
+3n+
4f(n) = f(n-1) + 3n+4
f(n)=f
(n−1
)+3n
+4即f(n
)=
1,&\text n \text \\ f(n-1)+\theta(n),&\text n \text \end
f(n)={
1,f(
n−1)
+θ(n
),if
n= 2
if n
> 2
因此,最壞時間複雜度為:θ(n
2)
\theta(n^2)
θ(n2)
參考文獻:
演算法導論第三版第二章第三節習題答案
插入排序演算法實現
插入排序在眾多排序演算法中是一種穩定的排序方法,其平均與最差時間複雜度均為o n2 空間複雜度為o 1 主要思路 每一次排序都將待排序元素的元素,從已排序的元素的左邊 右邊 開始,依次往右邊 左邊 比較,滿足比較條件的話就交換元素的位置。原理很簡單,先看 include using namespac...
插入排序演算法的實現
插入排序的基本思想是 每步將乙個待排序的記錄,按其關鍵碼值的大小插入前面已經排序的檔案中適當位置上,直到全部插入完為止。演算法適用於少量資料的排序,時間複雜度為o n 2 遍歷乙個陣列,每次遍歷乙個數的時候,和前邊的數判斷,如果比前邊的數小就和前邊的數交換,這樣直到滿足條件即可。我們觀察一下這個 在...
排序演算法(1)插入排序的演算法分析
結語 今天,我們介紹的是排序演算法經典的一種排序演算法,這個演算法是插入排序。相信大家都玩過紙牌。插入排序的工作方式就像許多人排序一手撲克牌。開始時,我們的左手為空並且桌子上的牌面朝下 意味著我們不在翻開之前並不知道下一張牌是多大的 然後,我們每次從那些牌中選出一張牌,並把它插入到正確的位置 一般我...