/**
*插入排序
*算法步骤:
*1、将第一个待排序的序列的第一个元素看做是一个有序序列
*2、把第二个元素到最后一个元素当成为排序序列
*3、从头到尾扫描未排序的序列
*4、将扫描到的每个元素插入有序序列的恰当位置
*
*命题:对于随机排列的长度为N且主键不重复的数组,平均情况下插入排序需要~N^2/4次
*比较以及~N^2/4次交换。最坏情况下需要~N^2/2次比较和~N^2/2次交换,最好情况下需
*要N-1次比较和0次交换。
*
*插入排序对非随机数组(已经有序或接近有序)很有效。
**/
#include <stdio.h>
void insertion_sort(int *a, int size);
void print_array(int *a, int size);
void swap(int *a, int *b);
int main(){
int array[] = {33,2,35,3,43,76,54,545,43,4,11,232};
int length = sizeof array / sizeof array[0];
puts("before sort:");
print_array(array, length);
insertion_sort(array, length);
puts("After sort:");
print_array(array, length);
return 0;
}
void insertion_sort(int *array, int size){
int i, j;
for(i = 1; i < size; ++i){
for(j = i; j > 0 && array[j] < array[j-1]; --j)
swap(&array[j], &array[j-1]);
}
}
void swap(int *a, int *b){
int temp = *a;
*a = *b;
*b = temp;
}
void print_array(int *a, int size){
int i;
for(i = 0; i < size; ++i)
printf("%d ", *(a+i));
putchar('\n');
}