插入排序

 

 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 }

 

posted @ 2017-02-26 15:26  oscarwin  阅读(180)  评论(0编辑  收藏  举报