void Insertsort(int* a,int n)
{
int end = 0;
//这里的i控制每次比较最多要执行多少次
for(int i = 0;i < n-1;i++)
{
//end保存当前位置
end = i;
//tmp保存要插入排序的数
//[0,end]有序,插入a[end+1],使得[0,end+1]有序
int tmp = a[end + 1];
while (end >= 0)
{
//当a[end] > tmp时,就要往后移一位
if (a[end] > tmp)
{
a[end + 1] = a[end];
//赋值后end--,取得下一个比较数
end--;
}
else
{
//因为排序是从都一个元素开始的,所以当a[end] =/< tmp时即代表不用排序
break;
}
}
//无论哪种结束将tmp保存end加一的位置
a[end + 1] = tmp;
}
}
int main()
{
int a[] = { 9,8,7,6,5,4,3,2,1 };
Insertsort(a, 9);
for (int i = 0; i < 9; i++)
{
printf("%d ", a[i]);
}
return 0;
}
直接插入排序就是每次将end+1元素与前面的元素比较排序。具体代码实现如上。