冒泡排序的疑问
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; 
    }  
 這樣也是一樣的.