回覆一下上面那篇好了, 先把問題簡化一下, 題目問你「三
個引數版本的函式 void func( int&, int&, int& ), 排序
後印出來該怎寫?」
在你試著解之前, 要先問自己以下幾個問題 :
1.我是否熟悉call by reference的語法 ?
2.題目最後要我呈現的最後結果是什麼 ?
3.如果兩個數排序再印出來, 我會不會印 ?
這些問題的答案如果是正面的, 且你回答的非常肯定, 那你
可以開始寫「第一行程式碼」了.
先考慮第 3 點的問題, 先做一個堪用的兩引數版本
void sortTwoVariables( int &a, int &b )
{
if( a > b )
swap( a, b );
}
可以用下面的測試程式碼來驗證自己有沒有實作成功
int main()
{
int x = 10, y = 5;
sortTwoVariables( x, y );
cout << x << ',' << y << endl;
}
我們可以利用 2個引數的版本, 來實作 3個引數的版本, 演
算法如下 :
1.先把a, b排好
2.c 從右往左跟a, b比較, 想辦法換到適當的位置
程式碼變成這樣 :
void sortThreeVariables( int &a, int &b, int &c )
{
// 先排序 a, b
sortTwoVariables( a, b );
// 視情況把 c 換到中間
if( c < b ) swap( b, c );
// 本來 c 的值變成 b 所擁有, 再視情況把 b 換到左邊
if( b < a ) swap( a, b );
}
測試的程式碼類似 2個引數的版本, 這個的概念跟 insert-
ion sort是一樣的, 相信用這樣的方法, 4、5甚至更多的引
數你都有辦法自行完成, 直接從各自比大小的方式下手, 會
造成if的結構很複雜難懂, divide & conquer 雖然不直覺,
但是比較不容易出錯, 僅供參考 :)
--
◢████ ◢█ ◢██◣ ◢█ ◢███ ◢█ T-ara版怎麼去
████◤ ██ ◢██◣█ ██ ████ ██ s ~> T-ara
█/███ ██ ██ ██ █/█ ◢███ █/█ 歡迎您的光臨
████◤ ██ ██ ██ ██◤ ███◤ ██◤ 恩靜、智妍、孝敏
█/███ ██ █/██◤ ██ █/██ ██ 素妍、居麗、寶藍
████◤ █◤ ◥██◤ █◤ ████◤█◤ ψmakigoto123
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.121.197.115