标签:style blog http color io ar for sp div
对于数组A[N]的插入排序由N-1趟排序组成。对于P=1趟到P=N-1趟,插入排序保证从位置0到位置P上的元素已为排序状态。实际上插入排序利用了这样的事实:位置0到位置P-1上的元素是已排过序的。在第P趟,我们将位置P上的元素向左移动到它在前P+1个元素的正确位置上。插入排序的过程可以用下图表示。
具体代码如下。由于嵌套循环的每一个都花费N次迭代,因此插入排序复杂度为O(N2)。
1 #include <stdio.h> 2 3 #define ElementType int 4 5 void PrintArray(ElementType A[], int N) 6 { 7 int i; 8 for (i = 0; i < N; i++) 9 { 10 printf("%d ", A[i]); 11 } 12 printf("\n"); 13 } 14 15 void InsertSort(ElementType A[], int N) 16 { 17 int j, P; 18 19 ElementType Tmp; 20 for (P = 1; P < N; P++) 21 { 22 Tmp = A[P]; 23 //for循环作用是将大于A[P]的逐个右移,小于A[P]的不做移动 24 for (j = P; j > 0 && A[j-1] > Tmp; j--) 25 A[j] = A[j-1]; 26 //找到合适位置将A[P]插入 27 A[j] = Tmp; 28 printf("After %d sort: ", P); 29 PrintArray(A, N); 30 } 31 } 32 33 34 int main() 35 { 36 int i, N; 37 scanf("%d", &N); 38 int A[N]; 39 for (i = 0; i < N; i++) 40 { 41 scanf("%d", &A[i]); 42 } 43 InsertSort(A, N); 44 45 return 0; 46 }
标签:style blog http color io ar for sp div
原文地址:http://www.cnblogs.com/bournet/p/3998871.html