数据结构 --- 直接插入排序

 1 //直接插入排序:将一个记录插入已经排好序的有序表中,得到一个新的、记录数加1的有序表
 2 void StraitInsertionSort(SqList *L)
 3 {
 4     int i, j;
 5     for (i = 2; i <= L->length; ++i)
 6     {
 7         if (L->array[i] < L->array[i - 1])
 8         {
 9             L->array[0] = L->array[i];
10             for (j = i - 1; L->array[j] > L->array[0]; --j)
11                 L->array[j + 1] = L->array[j];
12 
13             L->array[j + 1] = L->array[0];
14         }
15     }
16 }
17 
18 //复杂度分析:
19 //空间:只需要一个辅助空间
20 //时间:最好情况,比较  (L->array[i] < L->array[i - 1]) n-1 次,没有记录的移动,时间复杂度为 O(n)
21 //       最坏的情况,需要比较的次数 ((n+2)*(n-1)) / 2 次,需要移动记录的次数 ((n+1)*(n-1)) / 2 次,那么平均移动次数与平均比较次数为 n^2/4 ,时间复杂度为 O(n^2)

猜你喜欢

转载自www.cnblogs.com/luguoshuai/p/9508462.html