主题:直接插入排序
eagleking0000
[专家分:3330] 发布于 2007-12-07 20:30:00
书上的算法不严密.
我在第2个for加了j>0的判断
void insertsort(int r[], int n)
{
int i,j,mr;
for(i=1; i<n; i++)
{
mr=r[i]
for(j=i-1; j>0 && r[j]>mr; j--)
{
r[j+1]=r[j];
}
r[j+1]=mr;
}
}
回复列表 (共2个回复)
沙发
imjohnzj [专家分:1490] 发布于 2007-12-07 22:02:00
楼主:
你好,你的代码我己测试过了。
结果数组中的第一个数字得不到排序!
测试数据:5,1,9,4,8,7,2,6,3,0
数组的变化过程如下:
5 1 9 4 8 7 2 6 3 0
5 1 9 4 8 7 2 6 3 0
5 1 9 4 8 7 2 6 3 0
5 1 4 9 8 7 2 6 3 0
5 1 4 8 9 7 2 6 3 0
5 1 4 7 8 9 2 6 3 0
5 1 2 4 7 8 9 6 3 0
5 1 2 4 6 7 8 9 3 0
5 1 2 3 4 6 7 8 9 0
5 0 1 2 3 4 6 7 8 9
所以,我把你的代码做了如下修改:
void insertsort(int r[], int n)
{
int i,j,mr;
out(r,10);
for(i=1; i<n; i++)
{
mr=r[i];
for(j=i-1; j>=0 && r[j]>mr; j--)
/*把 j>0 改成 j>=0*/
{
r[j+1]=r[j];
}
r[j+1]=mr;
out(r,10);
}
}
同样的数组的变化过程就为如下:
5 1 9 4 8 7 2 6 3 0
1 5 9 4 8 7 2 6 3 0
1 5 9 4 8 7 2 6 3 0
1 4 5 9 8 7 2 6 3 0
1 4 5 8 9 7 2 6 3 0
1 4 5 7 8 9 2 6 3 0
1 2 4 5 7 8 9 6 3 0
1 2 4 5 6 7 8 9 3 0
1 2 3 4 5 6 7 8 9 0
0 1 2 3 4 5 6 7 8 9
你看如何?
落款:偷偷地改了
我来回复