Unity - A计划(永久有效期) 扫二维码继续学习 二维码时效为半小时

(197评价)
价格: 4431.00元
直接插入排序
张同学斯基发起了问答2017-02-14
4
回复
351
浏览
  static public void InsertSort(List<int> R)
        {
            for (int i = 1; i < R.Count; i++) 
            {
                if (R[i] < R[i - 1])  
                {
                    int temp = R[i];    
                    int j = 0;
                    for (j = i - 1; j >= 0 && temp < R[j]; j--)
                    {
                        R[j + 1] = R[j];  
                    }
                    R[j+1] = temp;
                }
            }
        }

老师,最后一句R[j+1]=temp  我自己就写成R[j]=temp了,因为上面的R[j+1]=R[j]不是已经把j推后了吗?为什么还要在推后一次呢?

所有回复
  • siki 2017-02-14

    应该是R[j]=temp;

    还有-5条回复,点击查看
    你还没有登录,请先登录注册
  • siki 2017-02-14

    我不记得原来代码怎么写的了  有视频截图吗

    看这个段代码的话应该是R[j]=temp;

    还有-5条回复,点击查看
    你还没有登录,请先登录注册
  • 张同学斯基 2017-02-15

    老师,我贴的是正确的。我自己重新写就理解不了  R[j+1]=temp 这句。我用R[j]=temp 就是显示错误,报告是:索引超出范围,必须为非负值,并且小于集合大小。

        不是视频中讲的那种直接插入排序,是网上的另外一种写法。我想换个角度理解直接插入排序。

    还有-5条回复,点击查看
    你还没有登录,请先登录注册
  • siki 2017-02-15

    当跳出循环的时候 temp>=r[j]  所以temp放在j+1的位置

    r[j+1]=temp

    还有-5条回复,点击查看
    你还没有登录,请先登录注册
发表回复
你还没有登录,请先 登录或 注册!