回 帖 发 新 帖 刷新版面

主题:直接插入排序

书上的算法不严密.
我在第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个回复)

沙发

楼主:
    你好,你的代码我己测试过了。
    结果数组中的第一个数字得不到排序!
测试数据: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
你看如何?
            落款:偷偷地改了

板凳

不好意思,漏了.

我来回复

您尚未登录,请登录后再回复。点此登录或注册