插入排序是一种最基本的排序方法,时间复杂度为O(n2)。
其基本思想就是假设A[0, ... j-1]为已经排好序的子数组,通过把A[j]与前面的元素进行比较,将A[j]插入到已经排好顺序的子数组之中。
用C语言简单实现的插入排序如下:
1 /* 插入排序的C语言实现, 时间复杂度为O(n2) */ 2 /* a为要排序的数组, LEN为数组的长度 */ 3 void insert_sort(int a[], int LEN) 4 { 5 int i, j, key; 6 for(j=1; j<LEN; j++) 7 { 8 key = a[j]; 9 i = j-1; 10 while(i>0 && a[i]>key) 11 { 12 a[i+1] = a[i]; 13 --i; 14 } 15 a[i+1] = key; 16 } 17 }
测试代码如下:
1 #include<stdio.h> 2 3 #define MAXSIZE 10 4 5 /* 插入排序的C语言实现, 时间复杂度为O(n2) */ 6 /* a为要排序的数组, LEN为数组的长度 */ 7 void insert_sort(int a[], int LEN) 8 { 9 int i, j, key; 10 for(j=1; j<LEN; j++) 11 { 12 key = a[j]; 13 i = j-1; 14 while(i>0 && a[i]>key) 15 { 16 a[i+1] = a[i]; 17 --i; 18 } 19 a[i+1] = key; 20 } 21 } 22 23 int main() 24 { 25 int a[MAXSIZE]; 26 int i; 27 printf("Please input the num:\n"); 28 for(i=0; i<MAXSIZE; i++) 29 { 30 scanf("%d",&a[i]); 31 } 32 printf("before the sort:\n"); 33 for(i=0; i<MAXSIZE; i++) 34 { 35 printf("%d ", a[i]); 36 } 37 printf("\n"); 38 39 insert_sort(a, MAXSIZE); 40 41 printf("after the sort:\n"); 42 for(i=0; i<MAXSIZE; i++) 43 { 44 printf("%d ", a[i]); 45 } 46 printf("\n"); 47 48 }