插入排序的遞迴實現與分析 演算法導論2 3 4

2021-09-22 12:29:48 字數 1003 閱讀 4192

把插入排序表示為如下的乙個遞迴過程:為了排序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)插入排序的演算法分析

結語 今天,我們介紹的是排序演算法經典的一種排序演算法,這個演算法是插入排序。相信大家都玩過紙牌。插入排序的工作方式就像許多人排序一手撲克牌。開始時,我們的左手為空並且桌子上的牌面朝下 意味著我們不在翻開之前並不知道下一張牌是多大的 然後,我們每次從那些牌中選出一張牌,並把它插入到正確的位置 一般我...