日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

冒泡法排序c语言函数模板,使用模板技术的冒泡排序

發(fā)布時(shí)間:2023/12/15 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 冒泡法排序c语言函数模板,使用模板技术的冒泡排序 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

#include

#include

#include

using namespace std;

template

bool compare(Elem lhs, Elem rhs){

if (lhs<=rhs)? return false;

else return true;

}

//template

//typedef bool(*comparefunc)(Elem lhs, Elem rhs);?? 不能利用模板來重定義類型。

template

void bubblesort(Elem* arr, int n, bool(*func)(Elem lhs, Elem rhs) = compare)

//下面這個(gè)語句中相當(dāng)于對函數(shù)指針起了兩個(gè)名字,應(yīng)該是上面這樣。

//實(shí)際上函數(shù)指針的類型表示是bool (*)(Elem ,Elem),func已經(jīng)是函數(shù)指針名了。

//void bubblesort(Elem* arr, int n, bool(*func)(Elem lhs, Elem rhs)

comparefunc= compare)

{

Elem temp;

for (int i = 0; i < n-1; i++){? //一要保證數(shù)組不越界,二要保證保證對所有數(shù)據(jù)進(jìn)行排序。

for (int j = i + 1; j < n ; j++){

if (arr[j] < arr[i]){

temp = arr[i];

arr[i] = arr[j];

arr[j] = temp;

}

}

}

}

class Credit{

public:

Credit():value(0){? //利用初始化參數(shù)列表來初始化字段。

}

Credit(int value){

this->value = value;

}

int getValue(){

return this->value;

}

void setValue(int value){?? //setValue表示的是一個(gè)賦值過程,并不要求將結(jié)果返回。所以返回值類型為void類型。

this->value = value;

}

bool operator

return (this->value < other.getValue()) ? true : false;

}

bool operator==(Credit& other){

return (this->value == other.getValue()) ? true : false;

}

bool operator<=(Credit& other){

//在進(jìn)行運(yùn)算符重載時(shí),定義的重載函數(shù)的返回值等信息要與原運(yùn)算符的本質(zhì)保持一致,這里應(yīng)該返回的是布爾類型。

//下面的語句提示Credit沒有value成員。是因?yàn)樵陬愔兄荒茉L問當(dāng)前對象(用this指針引用的對象的private數(shù)據(jù)成員,對于與當(dāng)前類同類型的其他實(shí)例在本類的成員函數(shù)中無法直接訪問其private數(shù)據(jù)成員。所以說在當(dāng)前類本身中可以訪問類的private數(shù)據(jù)成員,只是針對類的當(dāng)前實(shí)例,而不是該類型的所有實(shí)例。??????? //return (this->value <=other.value) ? true : false;

return (this->value <= other.getValue()) ? true : false;??????? //也可以寫成? return (this

//當(dāng)類本身的比較復(fù)雜時(shí),這樣寫可充分利用已有代碼,并且當(dāng)其他運(yùn)算符要進(jìn)行變動(dòng)時(shí),這里一般不需要改動(dòng)。

}

private:

int value;

};

int main(){

int arr[10] = { 3, 5, 7, 11, 78, 34, 67, 45, 23, 4 };

bubblesort(arr, 10);

for (int num : arr){

cout << num << " ";

}

Credit creditSet[23];

srand(time(NULL));? //time是個(gè)內(nèi)聯(lián)函數(shù),用static修飾,參數(shù)和返回值都是一個(gè)64位的整數(shù),但是srand的參數(shù)是unsigned int。

for (int i = 0; i < 23; i++){? //注意這里的23可不能用sizeof(creditSet/sizeof(Credit))來表示,因?yàn)橛袃?nèi)存對齊的影響。

creditSet[i].setValue(rand() % 100);

}

cout << endl;

bubblesort(creditSet, 23);

for (int i = 0; i < 23; i++){? //注意這里的23可不能用sizeof(creditSet/sizeof(Credit))來表示,因?yàn)橛袃?nèi)存對齊的影響。

cout<

}

return 0;

}

一些參考資料

C/C++怎樣產(chǎn)生隨機(jī)數(shù):這里要用到的是rand()函數(shù), srand()函數(shù),C語言/C++里沒有自帶的random(int number)函數(shù)。

(1)? 如果你只要產(chǎn)生隨機(jī)數(shù)而不需要設(shè)定范圍的話,你只要用rand()就可以了:rand()會(huì)返回一隨機(jī)數(shù)值, 范圍在0至RAND_MAX 間。RAND_MAX定義在stdlib.h, 其值為2147483647。(注:是否包括區(qū)間端點(diǎn)????)

(2)? 如果你要隨機(jī)生成一個(gè)在一定范圍的數(shù),你可以在宏定義中定義一個(gè)random(int number)函數(shù),然后在main()里面直接調(diào)用random()函數(shù):

例如:隨機(jī)生成10個(gè)0~100的數(shù):

#include

#include

#define random(x) (rand()%x)void main()

{

for(int x=0;x<10;x++)

printf("%d/n",random(100));

}

(3)但是上面兩個(gè)例子所生成的隨機(jī)數(shù)都只能是一次性的,如果你第二次運(yùn)行的時(shí)候輸出結(jié)果仍和第一次一樣。這與srand()函數(shù)有關(guān)。srand()用來設(shè)置rand()產(chǎn)生隨機(jī)數(shù)時(shí)的隨機(jī)數(shù)種子。在調(diào)用rand()函數(shù)產(chǎn)生隨機(jī)數(shù)前,必須先利用srand()設(shè)好隨機(jī)數(shù)種子(seed), 如果未設(shè)隨機(jī)數(shù)種子, rand()在調(diào)用時(shí)會(huì)自動(dòng)設(shè)隨機(jī)數(shù)種子為1。上面的兩個(gè)例子就是因?yàn)闆]有設(shè)置隨機(jī)數(shù)種子,每次隨機(jī)數(shù)種子都自動(dòng)設(shè)成相同值1 ,進(jìn)而導(dǎo)致rand()所產(chǎn)生的隨機(jī)數(shù)值都一樣。

srand()函數(shù)定義 : void srand (unsigned int seed);

通常可以利用geypid()或time(0)的返回值來當(dāng)做seed如果你用time(0)的話,要加入頭文件#include

在stdlib.h 中這兩個(gè)函數(shù)的原型是:

int rand();

void srand (unsigned int);

擴(kuò)充:

x = rand()%11; /*產(chǎn)生1~10之間的隨機(jī)整數(shù)*/

y = rand()%51 - 25; /*產(chǎn)生-25 ~ 25之間的隨機(jī)整數(shù)*/

注:根據(jù)要求的兩個(gè)數(shù)據(jù)之間的差值確定rand函數(shù)后面取余多少。比如產(chǎn)生【a,b]的數(shù),則取余的數(shù)是b-a,若a=-7,b=-2,取余后一共有b-a+1種值,則取余的數(shù)為b-a+1,結(jié)果在(0,b-a)之間,共b-a+1種值。

取余后的值中0對應(yīng)區(qū)間中的小值,所以delta=a-0

z = ((double)rand()/RAND_MAX)*(b-a) + a;/*產(chǎn)生區(qū)間[a,b]上的隨機(jī)數(shù)*/

總結(jié)

以上是生活随笔為你收集整理的冒泡法排序c语言函数模板,使用模板技术的冒泡排序的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。