排序算法——插入排序
插入排序就是每一步都將一個(gè)待排數(shù)據(jù)按其大小插入到已經(jīng)排序的數(shù)據(jù)中的適當(dāng)位置,直到全部插入完畢。?
插入排序方法分直接插入排序和折半插入排序兩種,這里只介紹直接插入排序,折半插入排序留到“查找”內(nèi)容中進(jìn)行。?
? 圖1演示了對(duì)4個(gè)元素進(jìn)行直接插入排序的過(guò)程,共需要(a),(b),(c)三次插入。
以下代碼僅供參考,歡迎指正
#include "stdafx.h"void insert_sort(int a[],int len) {for (int i=1;i<len;i++){int temp = a[i];int j=i-1;while (j>=0 && a[j]>temp){a[j+1] = a[j];j--;}if (j!=i-1) a[j+1]=temp;} }int main(int argc, char* argv[]) {int a[]={2,3,4,9,1,5,6,0,7,8};insert_sort(a,sizeof(a)/sizeof(int));return 0; }
效率分析
穩(wěn)定?
空間復(fù)雜度O(1)?
時(shí)間復(fù)雜度O(n2)?
最差情況:反序,需要移動(dòng)n*(n-1)/2個(gè)元素?
最好情況:正序,不需要移動(dòng)元素
數(shù)組在已排序或者是“近似排序”時(shí),插入排序效率的最好情況運(yùn)行時(shí)間為O(n);
插入排序最壞情況運(yùn)行時(shí)間和平均情況運(yùn)行時(shí)間都為O(n2)。
通常,插入排序呈現(xiàn)出二次排序算法中的最佳性能。
對(duì)于具有較少元素(如n<=15)的列表來(lái)說(shuō),二次算法十分有效。
在列表已被排序時(shí),插入排序是線性算法O(n)。
在列表“近似排序”時(shí),插入排序仍然是線性算法。
在列表的許多元素已位于正確的位置上時(shí),就會(huì)出現(xiàn)“近似排序”的條件。
通過(guò)使用O(nlog2n)效率的算法(如快速排序)對(duì)數(shù)組進(jìn)行部分排序,
然后再進(jìn)行選擇排序,某些高級(jí)的排序算法就是這樣實(shí)現(xiàn)的。
總結(jié)
以上是生活随笔為你收集整理的排序算法——插入排序的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 基地址和偏移地址的概念
- 下一篇: 各种排序算法的比较