1 /************************************************************************/
2 /* 插入排序法
3 /* 时间复杂度:O(N^2)
4 /************************************************************************/
5 #include<stdio.h>
6
7
8 /************************************************************************/
9 /* 版本1:
10 /* 这种方法类似于冒泡法,中间交换数值要进行三条语句,降低了效率
11 /************************************************************************/
12 void InsertionSort1(int* array, int size)
13 {
14 for (int i = 1; i < size; ++i)
15 {
16 for (int j = i; j > 0; --j)
17 {
18 if (array[j] < array[j - 1])
19 {
20 int tmp = array[j];
21 array[j] = array[j - 1];
22 array[j - 1] = tmp;
23 }
24 }
25 }
26 }
27
28 /************************************************************************/
29 /* 版本2:
30 /* 将i和j的定义放到循环之外也能加快速度
31 /************************************************************************/
32 void InsertionSort2(int* array, int size)
33 {
34 int i, j;
35 int tmp;
36 for (i = 1; i < size; ++i)
37 {
38 tmp = array[i];
39 for (j = i; array[j - 1] > tmp && j > 0; --j)
40 {
41 array[ j ] = array[j - 1];
42 }
43 array[ j ] = tmp;
44 }
45 }
46
47 int main()
48 {
49 int Array[10] = {5, 45, 36, 48, 20, 17, 84, 201, 92, 54};
50 for (int index = 0; index < 10; ++index)
51 {
52 printf("%d ", Array[index]);
53 }
54
55 InsertionSort2(Array, 10);
56
57 printf("\r\n");
58
59 for (int index = 0; index < 10; ++index)
60 {
61 printf("%d ", Array[index]);
62 }
63 return 0;
64 }