看板 C_and_CPP 關於我們 聯絡資訊
回覆一下上面那篇好了, 先把問題簡化一下, 題目問你「三 個引數版本的函式 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