思路写的比较少,不太懂的可以看后面的图

//************************插入排序****************************
//NOTE:最外层的循环上限,不能让index到达最后一个数据
//思路:从数组第一个元素开始与后面的数据比较,,让end指向当前的数据,
// 把后一个数保存在tmp中,如果前面的数比后面的大,则让前面的数后移一个
// 位置,把end--,然后再比较tmp中的值和end指向的元素,如果依然end指向的
// 数据大,则让end继续--,继续比较,直到tmp中的值比end的值大,则此时end
// 指向的数据比tmp中的值小,则把tmp中的值放入end后面的位置中
voidInsertSort(int*a,size_tsize)
{
assert(a);
for(intindex
= 0; index <size- 1; index++)
{
intend
= index;
inttmp
=a[end + 1];
//end不停--指向不同的值,与tmp的值比较,如果比tmp大,则数据向后移
while(end
>= 0 &&a[end]>tmp)
{
a[end
+ 1] =a[end];
--end;
}
//出循环后,end指向的数一定比tmp里面的值小,所以要放在end+1后面
a[end
+ 1] = tmp;
}
}
voidPrint(int*a,size_tsize)
{
for(inti
= 0; i <size; i++)
{
cout <<a[i]
<< endl;
}
}
voidInsertSortTest()
{
intarr[]
= { 2, 5, 4, 9, 3, 6, 8, 7, 1, 0 };
InsertSort(arr,sizeof(arr)
/sizeof(arr[0]));
Print(arr,sizeof(arr)
/sizeof(arr[0]));
}
intmain()
{
InsertSortTest();
return0;
}
图上只画了数组下标0-3的示意图:
程序旁边的图请忽略掉,因为方便画图,就把1和0调前面来了