插入排序的算法思想:将待排序元素分为已排序子集和未排序子集,依法从未排序子集中的一个元素插入到已排序子集中,使已排序子集仍然有序。重复执行以上过程,直到所有元素都有序为止。
直接插入排序是一种最简单的插入排序算法。
示例:
#include <stdio.h>
void printarray(int a[], int n);
int main()
{
int a[] = {17, 46, 32, 87, 58, 9, 50, 38};
int t, i, j, n;
n = sizeof(a) / sizeof(a[0]);
for (i = 1; i < n; i++)
{
t = a[i];
for (j = i - 1; j >= 0 && t < a[j]; j--)
{
a[j + 1] = a[j];
printf("j = %d\n", j);
}
a[j + 1] = t;
printf("2j = %d\n", j);
printarray(a, n);
}
return 0;
}
void printarray(int a[], int n)
{
int i;
for (i = 0; i < n; i++)
{
printf("%4d", a[i]);
}
printf("\n");
}
结果: