數的交換演算法 誰說數的交換一定要第三個變數

2021-04-12 23:51:52 字數 1920 閱讀 5860

數的交換演算法(誰說數的交換一定要第三個變數)

餘紅釗

一,記得第一次接觸到數的交換演算法是在初一的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,則...