插入排序(Insertion Sort)的算法描述是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在实现上,通常采用in-place排序(即只需用到O(1)的额外空间的排序),因而在从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素提供插入空间。
最坏时间复杂度 O(n^2)
插入排序是稳定的排序算法。
- #include <stdio.h>
- void insert_sort(int a[], int num)
- {
- int i, j, temp;
- for (i = 1; i < num; i++) {
- temp = a[i];
- for (j = i - 1; j >= 0 && a[j] > temp; j--) {
- a[j+1] = a[j];
- }
- a[j+1] = temp;
- }
- }
- void print(int a[], int num)
- {
- int i;
- for (i = 0; i < num; i++) {
- printf("%d ", a[i]);
- }
- printf("/n");
- }
- int main()
- {
- int i, num;
- int a[10] = {1,7,5,8,4,2,6,9,3,10};
- num = sizeof(a) / sizeof(int);
- insert_sort(a, num);
- print(a, num);
- return 0;
- }