每次从无序表中取出第一个元素,把它插入到有序表的合适位置,使有序表仍然有序。
第一趟比较前两个数,然后把第二个数按大小插入到有序表中;
第二趟把第三个数据与前两个数从前向后扫描,把第三个数按大小插入到有序表中;
依次进行n-1趟扫描后就完成了整个排序过程
1 #include <stdio.h> 2 #include <stdlib.h> 3 4 int n; 5 6 /* 7 * 直接插入排序 8 */ 9 void InsertSort(int *array) 10 { 11 int i, j; 12 for (i = 2; i <= n; i++) 13 { 14 if (array[i] < array[i - 1]) 15 { 16 array[0] = array[i]; 17 array[i] = array[i - 1]; 18 for (j = i - 2; array[0] < array[j]; j--) 19 { 20 array[j + 1] = array[j]; 21 } 22 array[j + 1] = array[0]; 23 } 24 } 25 } 26 27 int main() 28 { 29 int i; 30 int *array; 31 printf("请输入数组的大小:"); 32 scanf("%d", &n); 33 array = (int*) malloc(sizeof(int) * (n + 1)); 34 printf("请输入数据(用空格分隔):"); 35 for (i = 1; i <= n; i++) 36 { 37 scanf("%d", &array[i]); 38 } 39 InsertSort(array); 40 printf("排序后为:"); 41 for (i = 1; i <= n; i++) 42 { 43 printf("%d ", array[i]); 44 } 45 printf(" "); 46 }