排序演算法之插入排序
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...