排序算法——插入排序
生活随笔
收集整理的這篇文章主要介紹了
排序算法——插入排序
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
插入排序就是每一步都將一個待排數據按其大小插入到已經排序的數據中的適當位置,直到全部插入完畢。?
插入排序方法分直接插入排序和折半插入排序兩種,這里只介紹直接插入排序,折半插入排序留到“查找”內容中進行。?
? 圖1演示了對4個元素進行直接插入排序的過程,共需要(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; }
效率分析
穩定?
空間復雜度O(1)?
時間復雜度O(n2)?
最差情況:反序,需要移動n*(n-1)/2個元素?
最好情況:正序,不需要移動元素
數組在已排序或者是“近似排序”時,插入排序效率的最好情況運行時間為O(n);
插入排序最壞情況運行時間和平均情況運行時間都為O(n2)。
通常,插入排序呈現出二次排序算法中的最佳性能。
對于具有較少元素(如n<=15)的列表來說,二次算法十分有效。
在列表已被排序時,插入排序是線性算法O(n)。
在列表“近似排序”時,插入排序仍然是線性算法。
在列表的許多元素已位于正確的位置上時,就會出現“近似排序”的條件。
通過使用O(nlog2n)效率的算法(如快速排序)對數組進行部分排序,
然后再進行選擇排序,某些高級的排序算法就是這樣實現的。
總結
以上是生活随笔為你收集整理的排序算法——插入排序的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 基地址和偏移地址的概念
- 下一篇: 各种排序算法的比较