日期:2014-05-19  浏览次数:20868 次

冒泡排序的疑问
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]

有点晕,谁给解释一下啊,给一个连接也成啊

------解决方案--------------------
有好几种写法没必要死扣他的算法,知道怎么回事就行,然后自己写

------解决方案--------------------
是呀,你不要就看他的表达方式,知道原理就行了
//
// 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());
}

------解决方案--------------------
不理解在这里为什么要用R(j-2)来循环,
==============
因为这里

if(R[j+1] <R[j])

------解决方案--------------------
他的是對的,因為他下面用的是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;
}
這樣也是一樣的.