插入排序可以用一个抽扑克牌的模型来便于理解,手上的牌默认是排好序的,每次抓牌后,进行比较,大的往后移动,知道比较到小的才插入。
#include <stdio.h> // 交换函数 void swap (int a[], int i, int j) { int tmp = a[i]; a[i] = a[j]; a[j] = tmp; } // 打印数组 void printA (int *a, int len) { int i; for (i = 0; i < len; i++) { printf ("M", a[i]); } printf ("\n"); } int main() { int a[10] = {9,6,8,0,3,5,2,4,7,1}; int len = sizeof(a) / sizeof(a[0]); int get; // 抓牌 int i,j; for (i = 1; i < len; i++) { get = a[i]; // 抓牌 j = i - 1; // 找到第一个比抓到的牌小的元素,并且进行移位 while (j >= 0 && a[j] > get) { a[j+1] = a[j]; // 如果元素比新抓到的元素大,往后移一个位置 j--; } a[j+1] = get; // 将新元素插入第一个比它小的元素的后面 } printA (a, len); return 0; }