排序算法(5)——插入排序

[轉載] 《算法導論》
[轉載] http://blog.sina.com.cn/s/blog_6d677b680100s3hh.html

1、插入排序的思想

這裏寫圖片描述
這裏寫圖片描述
這裏寫圖片描述

2、插入排序的實現

void insert_sort(int *a,int n)
{
    int i,j,key;
    for(i=1;i<n;i++)//控制需要插入的元素
    {
       key=a[i]; //key爲要插入的元素
       for(j=i;j>0 && a[j-1]>key;j--) //查找要插入的位置,循環結束,則找到插入位置
            a[j] = a[j-1]; //移動元素的位置.供要插入元素使用
       a[j] = key; //插入需要插入的元素
    }
}

2、插入排序的性能

1)、時間複雜度
最差時間複雜度爲 O(n^2)。當數據是逆序的,比較次數和交換次數都是1+2+3+…i+…(n-1),即n*(n-1)/2。
最好時間複雜度是O(n)。當數據是已經排好序的,這時內層的for檢測總是判定不成立的。
平均時間複雜度爲 O(n^2)。因爲平均時間複雜度接近於最差時間複雜度。

2)、穩定性
插入排序是穩定的排序算法。因爲它是從右往左找合適的(不大於它)位置,再進行插入,所以即便有兩個相等的元素,經過排序,前後還關係依舊維持。

和其它層算法的比較:
插入排序和冒泡排序都是穩定的排序。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章