插入排序

对于数组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 }

 

posted @ 2014-09-28 19:47  bournet  阅读(150)  评论(0编辑  收藏  举报