插入排序
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 }