对于未排序的数列,逐个向前扫描,找到相应位置并插入,实现代码如下:
#include <stdio.h>
void InsertSort(int *array, int n)
{
int i, j, temp;
for (i = 1; i < n; i++) //从第一个元素开始查询
{
temp = array[i]; //第i个元素存入temp缓冲变量
j = i - 1; //j为第i个元素的前一个元素索引
while (j >= 0 && array[j] > temp) //当第i个元素的前一个元素大于它
{
array[j + 1] = array[j]; //交换两个元素
j--; //交换后,继续与前一个的前一个元素比较
}
array[j + 1] = temp; //当第i个元素的前一个元素小于等于它,则停在当前位置
}
for (i = 0; i < n; i++)
{
printf("%d ", array[i]);
}
}
int main()
{
int a[] = {7, 6, 5, 4, 3, 2};
int n = sizeof(a) / sizeof(a[0]);
InsertSort(a, n);
return 0;
}
输出结果:
2 3 4 5 6 7