思路写的比较少,不太懂的可以看后面的图
![大笑](http://static.blog.csdn.net/xheditor/xheditor_emot/default/laugh.gif)
//************************插入排序****************************
//NOTE:最外层的循环上限,不能让index到达最后一个数据
//思路:从数组第一个元素开始与后面的数据比较,,让end指向当前的数据,
// 把后一个数保存在tmp中,如果前面的数比后面的大,则让前面的数后移一个
// 位置,把end--,然后再比较tmp中的值和end指向的元素,如果依然end指向的
// 数据大,则让end继续--,继续比较,直到tmp中的值比end的值大,则此时end
// 指向的数据比tmp中的值小,则把tmp中的值放入end后面的位置中
void
InsertSort(
int
*
a
,
size_t
size
)
{
assert
(
a
);
for
(
int
index = 0; index <
size
- 1; index++)
{
int
end = index;
int
tmp =
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;
}
}
void
Print(
int
*
a
,
size_t
size
)
{
for
(
int
i = 0; i <
size
; i++)
{
cout <<
a
[i] << endl;
}
}
void
InsertSortTest()
{
int
arr[] = { 2, 5, 4, 9, 3, 6, 8, 7, 1, 0 };
InsertSort(arr,
sizeof
(arr) /
sizeof
(arr[0]));
Print(arr,
sizeof
(arr) /
sizeof
(arr[0]));
}
int
main()
{
InsertSortTest();
return
0;
}
图上只画了数组下标0-3的示意图:
程序旁边的图请忽略掉,因为方便画图,就把1和0调前面来了