排序算法(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)、稳定性
插入排序是稳定的排序算法。因为它是从右往左找合适的(不大于它)位置,再进行插入,所以即便有两个相等的元素,经过排序,前后还关系依旧维持。

和其它层算法的比较:
插入排序和冒泡排序都是稳定的排序。

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