功能:对一组数进行排序。
基本思想:把待排数据中的数据一个一个插入以排好序的序列中,使整个数据成有序序列,如下图所示。
(图片来源于维基百科)
算法实现思想:有两个已知序列A,B,A为一组以排好序的数据,B为一组未排序数据。首先让A中只有一个数据,那么A必定为有序的,然后从B中逐个取出数据,插入A中,让A始终保持有序,知道B中的数据被取完,则A中的数据必定为有序的。
#include <stdio.h> void insertion_sort(int array[], int first, int last) { int i, j , k , x; int z; for(i = 1; i < last; i++) { k = array[i]; z = i; for(j = i - 1; j >= 0; j --) { if(array[j] >= k) { for(x = z-1; x >= j; x--) { array[x + 1] = array[x]; } array[j] = k; z --; } else { break; } } } } void main() { int a[20]; int i = 0; int j; int k = 0; printf("请输入要排序的数"); while(1) { scanf("%d", &j); if(j == 0) { break; } a[i] = j; k++; i++; } insertion_sort(a, 0, i); int z; for(z = 0;z < i; z++) { printf("%d ", a[z]); } printf("\n"); }
时间复杂度:O(n2)
用途:数据量较小。