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)时间复杂度,直接插入排序法比冒泡和简单选择排序的性能要好一些。
时间: 2024-10-02 18:17:54