查看單個文章
舊 2007-10-20, 09:04 AM   #7 (permalink)
mini
管理版主
 
mini 的頭像
榮譽勳章
UID - 4144
在線等級: 級別:97 | 在線時長:9903小時 | 升級還需:93小時級別:97 | 在線時長:9903小時 | 升級還需:93小時級別:97 | 在線時長:9903小時 | 升級還需:93小時級別:97 | 在線時長:9903小時 | 升級還需:93小時級別:97 | 在線時長:9903小時 | 升級還需:93小時級別:97 | 在線時長:9903小時 | 升級還需:93小時級別:97 | 在線時長:9903小時 | 升級還需:93小時
註冊日期: 2002-12-07
文章: 13362
精華: 0
現金: 26500 金幣
資產: 3024410 金幣
預設

不論是氣泡排列 還是xx排列
講到排列 最好是用 陣列去做
數值的交換不用到暫存變數的話
可以用
如果 a 大於 b 然後
a = a xor b
b = a xor b
a = a xor b

這就是上面 joebin 提到的
用c++的簡寫特性
就可寫成
a^=b^=a^=b;

======================
氣泡排列是個人認為最簡單易懂
且容易掌控花費時間的一種排列方式
語法:
#include <cstdlib>
#include <iostream>
using namespace std;

void swap(int &i, int &j){
/*
 i=i^j;
 j=i^j;
 i=i^j;
*/
 i^=j^=i^=j;
}

int main(int argc, char *argv[])
{
int aTmp[]={3,5,2};
int i,j;

 cout << "Before swap...";
 cout << "a=" << aTmp[0] << ",b=" << aTmp[1] << ",c=" << aTmp[2] << endl;
 cout << "After swap...";
 
 for (i=0; i<(3-1); i++){
   for (j=(i+1); j<3; j++){
      if (aTmp[i] > aTmp[j]) swap(aTmp[i], aTmp[j]);
   }
 }
 
 cout << "a=" << aTmp[0] << ",b=" << aTmp[1] <<",c=" << aTmp[2] << endl;
 
 system("pause");
 return 0;
}

此帖於 2007-10-20 03:39 PM 被 mini 編輯.
mini 目前離線  
送花文章: 2017, 收花文章: 8011 篇, 收花: 26820 次
回覆時引用此帖
向 mini 送花的會員:
joebin (2007-10-20)
感謝您發表一篇好文章