排序演算法之插入排序

2021-04-14 07:20:36 字數 2000 閱讀 9384

排序演算法之插入排序

1

插入排序的思想

假設在乙個有序序列中

e[0]~e[i-1]這i

個元素已經排好序,則當要將第

i+1個元素

e'插入該序列時,只需將第

i+1個元素與從

e[0]

開始到e[i-1]

元素進行比較,當發現第

j個元素

e[j]

在序列中應在

e'前,且

e[j+1]

應在e'

後時,將該有序列中從

e[j+1]

到e[i-1]

的元素向後移動乙個單元。最後將

e'插入原來

e[j+1]

所在的位置。重複前面的動作直到將所有的元素插入該有序列中為止。

2

插入排序的實現思想

在乙個無序序列中,乙個只有乙個元素

e[0]

的序列是有序的。此時按照上面的演算法思想將

e[1]

插入該有序序列中。如此往復,直到將原無序序列中所有的元素都插入該有序序列中為止。

< /p>

3

插入排序的具體實現

/* c

**的插入排序

有序序列為整數的由小到大序列

*/ void insertsort(int e,int n)

e[j+1]=e[j];

} e[j+1]=temp;

} }#!/usr/bin/perl

#perl

**的插入排序

#有序序列為整數的由小到大序列

sub insertsort

@e[$j+1]=@e[$j];

} @e[$j+1]=$temp;

} return(@e); }

#!/usr/local/bin/python

#python

**的插入排序

#有序序列為整數的由小到大序列

def insertsort(e):

i=j=0

n=len(e)

for i in range(1,n):

temp=e[i]

for j in range(0,i+1):

j=(i-1)-j

if(e[j]

break

e[j+1]=e[j]

e[j+1]=temp

return(e)

4

演算法分析

插入排序最壞的情況是初始序列與要求的序列逆序。此時,每次插入都需要將插入項後的元素向後移動。

插入排序的複雜度為

n(n-1)/2=o(n^2)

且 是穩定排序

插入排序的效能和原始序列的情況密切相關。當原始序列非常接近排序後的序列時,插入排序的效率是很高的。當原始序列與排序後的序列互為逆序時,插入排序的效率最差。

文外音:

很早以前就想寫這樣的文章了,所以今天有些時間就寫了。感覺我的

blog

很久都沒更新了,突然發現自己貌似有些變懶惰了。我覺得很多人把演算法理解的過於狹隘了,其實演算法本身並沒有意義。我之後還會用有類似的文章出來,如果各位有興趣的話可以關注一下。如果各位有什麼問題,可以到

上提出。

nerve

軟體開發組

(ndt)

nervedevelopment team

北斗星君

(黃庠魁)

排序演算法之插入排序

排序演算法之插入排序 1 插入排序的思想 假設在乙個有序序列中 e 0 e i 1 這i 個元素已經排好序,則當要將第 i 1個元素 e 插入該序列時,只需將第 i 1個元素與從 e 0 開始到e i 1 元素進行比較,當發現第 j個元素 e j 在序列中應在 e 前,且 e j 1 應在e 後時,...

排序演算法之插入排序

本節主要分析插入排序演算法的直接插入排序和希爾 shell 排序 又稱縮小增量排序 1.直接插入排序 該排序是最簡單的排序方法,其基本思想是 假設待排序的記錄存放在陣列r 1.n 中。初始時,r 1 自成1個有序區,無序區為r 2.n 從i 2起直至i n為止,依次將r i 插入當前的有序區r 1....

排序演算法之插入排序

將乙個數插入到一組已經排好序的序列中,保持插入後序列排序關係不變,這就是插入排序。將乙個陣列分為兩個部分,前一部分為已排序,後一部分為亂序,每次將亂序部分第乙個元素插入到有序部分中,從插入點開始有序部分元素依次後移,如此重複直至亂序元素個數為0,則完成整個排序過程。插入排序演算法 void inse...