**輸出型引數的設計理解**
在設計演算法時,輸入型引數的設計是十分簡單的,那麼輸出型引數如何讓解決呢?下面通過乙個例項進行說明。1. 例如設計乙個交換兩個整數的演算法,編寫相應的swap1(x,y)如下:
void swap1(int x,int y)
在該函式中確實發現了兩個形參x和y的值交換,但呼叫該演算法(也就是執行語句swap1(a,b))時發現a和b實參值並不會發生交換。出現錯誤的原因是這裡的形參x,y既是輸入型引數,也是輸出型引數,而swap1(x,y)中僅僅將形參x,y作為輸入型引數設計。
2.採用指標的方式來回傳形參的值,將上述函式改為如下:
void swap2(int
*x,int
*y)
這樣呼叫該函式的方式改為swap1(&a,&b),其中,&a,&b分別是實參a,b的位址,顯然這個演算法比較複雜,可讀性差。
3.採用引用型形參,也就是將輸出型形參設計為引用型別形參。
①.在c++語言中提供了一種引用運算子「&」。當建立引用時,程式用另乙個已定義的變數(目標變數)的名字初始化它,從那時起,引用變數作為目標變數的別名使用,對引用變數的改動實際是對目標變數的改動。
例如:
int a=4; /*定義整形變數a*/
int &b=a; /*定義整形變數a的引用變數b*/
變數b是變數a的引用變數,b也等於4,之後這兩個變數同步改變。
②.引用常用於函式引數中,當採用引用形參時,在函式呼叫是會將形參的改變回傳給實參。利用引用運算子將swap1()改為如下:
void swap(int &a,int &b) /*形參前的「&」符號不是指標運算子,而是引用*/
當執行語句swap(a,b)時,形,實參的匹配相當於:
int &x=a; /*x為a的引用*/
int &y=b; /*y為b的引用*/
這樣a與x共享儲存空間,b與y共享儲存空間,因此執行函式後a與b的值發生了交換。
③.為了加深對引用型形參的理解特寫此例:
輸入一元二次方程的三個係數a,b,c輸出跟的個數,以及根的值。
#include
#include
#include
#include
using
namespace
std;
int solution(double a,double b,double c,double &x3,double &x4); /*宣告函式*/
int solution(double a,double b,double c,double &x3,double &x4)
else
if(d==0)
else
return
0; /*乙個實根也沒有,返回零即可*/
}int main()
return
0;}
資料結構 計數排序
題目來自灰灰考研 counting sort基本思想 對於給定的輸入序列中的每乙個元素x,確定該序列中值小於x的元素的個數 一旦有了這個資訊,就可以將x直接存放到最終的輸出序列的正確位置上。它建立乙個長度為這個資料範圍的陣列c,c中每個元素記錄要排序陣列中對應記錄的出現個數。下面以示例來說明這個演算...
資料結構 計數排序
計數排序基於桶排序。比如待排陣列 a 5 那麼就需要建造 105 max 100 min 1 6 大小的臨時陣列,將這 5 個元素按照,值減 100 min 作為下標儲存在臨時陣列中。如下圖所示 計數排序 param a paramn private static void jishu int a,...
資料結構 計數排序
之前講到的插入 希爾 選擇 堆 冒泡 快速 歸併排序都屬於比較排序 涉及到兩個數的比較 接下來要講到一種非比較排序演算法 計數排序。1 什麼是計數排序 計數排序是一種非比較性質的排序演算法,元素從未排序狀態變為已排序狀態的過程,是由額外空間的輔助和元素本身的值決定的。計數排序過程中不存在元素之間的比...