數的交換演算法(誰說數的交換一定要第三個變數)
餘紅釗
一,記得第一次接觸到數的交換演算法是在初一的pascal教程..書上說..兩個變數數的交換就像兩袋大公尺的交換..首先要弄乙隻空袋子(temp)..其中一袋大公尺用這只空袋子來裝(temp=num1)..將另一袋的大公尺倒進這個袋子裡去(num1=num2)..將」空」袋子的大公尺裝進第一只袋子(num2=temp)…ok…
1,用引用形參實現
函式宣告為: void swap(int &, int &);
函式定義為:
void swap (int &num1, int &num2)
2,用指標形參實現
函式宣告為: void swap(int *, int *);
函式定義為
void swap(int *num1, int *num2)
二,大概在初二的時候看譚浩強的c語言在位運算那部分..發現了乙個不用第三個變數就能交換兩個變數的方法
1,異或的乙個性質——它與任意乙個二進位制數,連續異或兩次最終得到的還是它本身即有(
a = a ^ b ^b
)。
函式宣告為: void swap(int &, int &);
函式定義為:
void swap(int &num1, int &num2)
2,後來在高中上數學課時.想到了另乙個不用第三個變數就能交換變數的辦法…
函式宣告為: void swap(int &, int &);
函式定義為:
void swap(int &num1, int &num2)
根據效率而言…是那個用異或交換的更好點…現在的記憶體太大了..也太貴了..我的意思不是說為了省乙個變數..而是很多我們想當然的東西其實是我們思維太狹隘而已…餘紅釗..07年5月9日。
有趣有用的小演算法 交換演算法
1.中間值交換 int a 1,b 2 int c 把c作為中間值交換 交換a,b的值 c a a b b c 這個演算法相當於交換ab兩杯水,然後拿出乙個空杯子c,先讓c裝滿a的水,然後將b的水倒入a裡面,這樣a就裝了b的水。最後把c的水倒入b中。2.相減交換 int a 100,b 200 a ...
交換演算法引起的快速排序錯誤
前兩天手寫快速排序,最後得到的結果是錯誤的而且還錯的非常奇怪。輸入的待排序陣列是 int a 10 最後得到的結果是 002 0006 080 上網看了看別人的 發現我寫的快速排序的演算法邏輯是沒有錯誤的,難道是交換元素時用的演算法不對?我用的交換演算法是異或交換,就是不用中間變數那種 void s...
跨平台的時候,一定要用typedef定義資料型別
不同的程式執行平台所支援的資料型別會有少許區別,採用typedef方便跨平台移植 例如 平台 a 64位資料型別為long double 而平台 b 64位資料型別為long double,若想程式執行於平台a,則在程式之前申明 typedef long double real 若想移植到平台b,則...