基本思想:
当插入第 i (i >= 1)个数据元素时,前面的 V[0], V[1], ..., V[i-1] 已经排好序。这时,用 V[i] 的关键字与 V[i-1], V[i-2], ... 的关键字进行比较,找到插入位置即将 V[i] 插入,原来位置上的对象向后顺移。
直接看代码,仔细想想,其实不难!
#include <stdio.h> void println(int array[], int len) { int i = 0; for(i=0; i<len; i++) { printf("%d ", array[i]); } printf(" "); } void swap(int array[], int i, int j) { int temp = array[i]; array[i] = array[j]; array[j] = temp; } void InertionSort(int array[], int len) // O(n*n) { int i = 0; int j = 0; int k = 0; int tmp = 0; for (i = 1; i < len; i++) { k = i; tmp = a[i]; for (j = i-1; (j >= 0) && (array[j] > tmp); j--) { array[j+1] = array[j]; k = j; } array[k] = temp; } } int main(int argc, char**argv) { int array[] = {21, 25, 49, 25, 16, 8}; int len = sizeof(array) / sizeof(*array); println(array, len); InertionSort(array, len); println(array, len); }