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



冒泡排序的疑问


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


冒泡排序的疑问[已结贴,结贴人:kkun_3yue3]
发表于:2007-04-02 15:15:12 楼主
http://publish.it168.com/2005/0729/20050729087601.shtml
原文如上,
其中有这样一段代码
for(j=r.length-2;   j> =i;   j--)
      {
      //交换条件
      if(r[j+1] <r[j])
      {
      temp=r[j+1];
      r[j+1]=r[j];
      r[j]=temp;
      //发生了交换,故将交换标志置为真
      exchange=true;
      }  

不理解在这里为什么要用r(j-2)来循环,
下边又用r[j+1]判断,
赋值又用到了r[j]

有点晕,谁给解释一下啊,给一个连接也成啊
发表于:2007-04-02 15:36:221楼 得分:5
有好几种写法没必要死扣他的算法,知道怎么回事就行,然后自己写
发表于:2007-04-02 15:40:162楼 得分:0
就是想通过他的例子学习学习呀
现在问题就是不知道怎么回事,
发表于:2007-04-02 15:42:203楼 得分:5
是呀,你不要就看他的表达方式,知道原理就行了
//
//   todo:   在此处添加代码以启动应用程序
//
int   []box=new   int[]{21,   23   ,64,   8   ,12   ,73,   99,   14};
int   a;

//采用冒泡排序,小到大
for(int   i=0;i <box.length-1;i++)
{
for(int   j=0;j <box.length-1-i;j++)
{
if(box[j]> box[j+1])
{
a=box[j];
box[j]=box[j+1];
box[j+1]=a;
}

}

}

//output   result
for(int   i=0;i <box.length;i++)
{
console.writeline((i+1).tostring()   + ":       "+box[i].tostring());
}
发表于:2007-04-02 15:43:384楼 得分:0
看看我这个能理解吗
发表于:2007-04-02 15:44:065楼 得分:5
不理解在这里为什么要用r(j-2)来循环,
==============
因为这里

  if(r[j+1] <r[j])
发表于:2007-04-02 15:47:026楼 得分:5
他的是對的,因為他下面用的是r[j+1]與r[j]來比較,如果你用r(j-1)来循环的話,則是用r[j]與r[j-1]來比較.都是從r數組的最後兩個一個一個往前比較.   你應該要去理解理它,而不是硬背.所以你也可以寫成
for(j=r.length-3;   j> =i-1;   j--)
      {
      //交换条件
      if(r[j+2] <r[j+1])
      {
      temp=r[j+2];
      r[j+2]=r[j+1];
      r[j+1]=temp;
      //发生了交换,故将交换标志置为真
      exchange=true;
      }  
這樣也是一樣的.
发表于:2007-04-02 15:47:497楼 得分:0
不理解也得理解了,
谢谢你用代码说明问题,我这就消化去!~
发表于:2007-04-02 15:49:148楼 得分:0
就是想通过他的例子学习学习呀
现在问题就是不知道怎么回事,
---------
现在问题是用c#做冒泡排序是件很无聊的事情...
发表于:2007-04-02 15:57:429楼 得分:0
现在问题是用c#做冒泡排序是件很无聊的事情...
--------------
此话怎讲?


快速检索

最新资讯
热门点击