您的位置:程序门 -> .net技术 -> c#



看了半天也没发现这两个算法哪边不一样,大家帮忙看看啊~~~


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


看了半天也没发现这两个算法哪边不一样,大家帮忙看看啊~~~[已结贴,结贴人:jessie_yaya]
发表于:2007-01-18 14:02:32 楼主
下面的排序方法按照注释的几句改一下,为什么就不能运行正确地结果?大家帮忙看一下啊!!!先谢谢了
比如排序:1,7,5,6,10
按照注释的修改,得出的结果为:1,7,7,7,10
搞不懂有什么不一样,不就把变量替换了一下吗?
public   void   sort(int   []   list)  
      {  
      for(int   i=1;i <list.length;++i)  
      {  
      int   t=list[i];   //把这句去掉
      int   j=i;  
      while((j> 0)&&(list[j-1]> t))//改成while((j> 0)&&(list[j-1]> list[i]))
      {  
      list[j]=list[j-1];  
      --j;  
      }  
      list[j]=t;   //改成list[j]=list[i];  
      }  
}
发表于:2007-01-18 14:23:351楼 得分:20
当   list[j-1]> list[i]   时
list[j]=list[j-1];   这个时候list[j]的值已经改变,又由于j=i所以实际上list[i]已经不等于t了,而后list[j]=list[i](这里就相当于list[j]=list[j-1],与想要的已经不一样了)
发表于:2007-01-18 14:27:342楼 得分:0
list[i]     list[j]     list[j-1]     t
i=1     while前     7                 7                 7                     1
          while后     7                 7                 7                     1
i=2     while前     5                 5                 7                     5
          while后     7                 7                 7                     5

这样比较明了一点
发表于:2007-01-18 14:28:263楼 得分:0
但是j=i是在循环体之外,如果程序能跑到j=i,自然也能跑到它前面一句int   t=list[i]
那不是还是一样的吗?
发表于:2007-01-18 14:40:464楼 得分:0
噢,明白了^_^
发表于:2007-01-18 14:40:585楼 得分:0
谢谢


快速检索

最新资讯
热门点击