插入排序详解
思路
把后面的值(temp)与前面的值(end)做对比,
若temp位置的值小于end位置的值,
end位置的值给end+1位置。。
语言难以描述,请大家看下图。
代码
void InsertSort(int *arr, int n)
{
/*为了防止数组越界,我们最多访问到n-2就停止,
因为此时temp会赋值到n-1(数组的最后一个元素),
所以i<n-1即可*/
for (int i = 0; i < n - 1; i++)
{
int end = i;
int temp = arr[end + 1];
//注意是end>=0而不是end>0,因为下标为0与下标为1的值也需要比较
while (end >= 0)
{
if (temp < arr[end])
{
arr[end + 1] = arr[end];
//end下标往数组前面走,继续下一次对比
end--;
}
//没有比temp大的值就终止本次循环
else
{
break;
}
}
//前面没有比temp更小的值了,空出来的位置是end+1,temp的值就到这里来
arr[end + 1] = temp;
}
}