码迷,mamicode.com
首页 > 编程语言 > 详细

直接插入排序 Straight Insertion Sort

时间:2015-04-24 14:01:55      阅读:132      评论:0      收藏:0      [点我收藏+]

标签:

 

1.直接插入排序的思想:

将一个记录插入到已经排好序的的有序表中,从而得到一个新的、记录数增1的有序表。

 1 void InsertSort(SqList *L)
 2 {
 3     int i, j;
 4     for(i=2; i<=L->length; i++)
 5     {
 6         if(L->r[i] < L->r[i-1])
 7         {
 8             L->r[0] = L->r[i];
 9             for(j=i-1; L->r[j] > L->r[0]; j--)
10             {
11                 L->r[j+1] = L->r[j];
12             }
13             L->r[j+1] = L->r[0];
14         }
15     }
16 }

 

2.直接插入排序复杂度分析

空间复杂度:它只需要一个记录的辅助空间。

时间复杂度:

最好的情况:即表本身是有序的,只比较了 n-1 次,但没有记录的移动,时间复杂度是 O(n).

最坏的情况:即表本身是逆序的,此时需要比较 ∑i=2n(i) = 2+3+...+n = (n+2)(n-1)/2 次。

记录移动的次数也达到最大值 ∑ni=2(i+1) = (n+4)(n-1)/2 次。

所以平均比较和移动次数约为n2/4 次,时间复杂度为O(n2)。

但同样的O(n2)时间复杂度,直接插入排序法比冒泡和简单选择排序的性能要好一些。

直接插入排序 Straight Insertion Sort

标签:

原文地址:http://www.cnblogs.com/shiddong/p/4453066.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!