1 void insertSort(LineList R[], int n) 2 { 3 int i, j; 5 for (i = 2; i <= n; i++) 6 { 7 if (R[i].key < R[i - 1].key) 8 { 9 R[0].key = R[i].key; 11 for (j = i - 1; R[0].key < R[j].key; j--) 12 { 13 R[j + 1] = R[j]; 14 } 16 R[j + 1] = R[0]; 17 } 18 } 19 }
下标从0开始的算法如下:
1 void insertSort(ElementType A[], int N) 2 { 3 int p, i; 4 ElementType tmp; 5 6 for (p = 1; p < N; p++) 7 { 8 /* 取出未排序序列中的第一个元素 */ 9 tmp = A[p]; 10 11 /* 依次与已排序序列中元素比较并右移 */ 12 for (i = p; i > 0 && A[i - 1] > tmp; i--) 13 { 14 A[i] = A[i - 1]; 15 } 16 17 /* 放进合适位置 */ 18 A[i] = tmp; 19 } 20 }
稳定性:稳定
复杂度:
(1)最好:O(N)
(2)最坏:O(N2)