當前位置:成語大全網 - 新華字典 - 排序算法的C++算法

排序算法的C++算法

C++自帶的algorithm庫函數中提供了排序算法。

自帶排序算法的壹般形式為:

sort(arr+m,arr+n);//將數組arr的下標為m的元素到下標為n-1的元素進行從小到大排序

sort(arr+m,arr+n,comp);//與sort(arr+m,arr+n)相比,這個寫法可以自己定義排序的規則,其中,comp為自定義的函數

對於sort(arr+m,arr+n)我們舉個簡單的例子,這個程序實現從鍵盤讀入10個數,然後從小到大輸出的功能: #include<algorithm>#include<iostream>usingnamespacestd;main(){inta[10],i;for(i=0;i<10;i++)cin>>a[i];sort(a,a+10);for(i=0;i<10;i++)cout<<a[i]<<'';}當然,有時我們需要從大到小的進行排序。那麽我們可以用sort(arr+m,arr+n,comp)進行排序。

不過,在調用sort(arr+m,arr+n,comp)之前我們需要自己寫個comp函數。

從大到小排序的comp函數可以這樣寫: intcomp(inta,intb){returna>b;//在兩元素相同時壹定要返回0或者false}下面是10個數從大到小排序的代碼: #include<algorithm>#include<iostream>usingnamespacestd;intcomp(inta,intb){returna>b;//如果a>b則返回1,否則返回0}main(){inta[10],i;for(i=0;i<10;i++)cin>>a[i];sort(a,a+10,comp);for(i=0;i<10;i++)cout<<a[i]<<'';}在更多情況下,我們不僅對壹個特征進行排序,而是多個特征。例如將學生的成績進行排序,當然用上面的做法是行不通的。這是,我們就想到了結構體這種數據類型。當我們采用sort()函數的默認規則排序結構體時,sort()默認結構體中的第壹個成員為第壹關鍵字,第二個成員為第二關鍵字,……,第N個元素為第N關鍵字,然後從小到大排序。

例如我們要將學生的成績從大到小排序,當成績相同時,根據姓名字典序小的優先規則進行排序。顯然我們無法采用默認規則進行排序。

這時我們可以定義這樣的comp: intcomp(studenta,studentb){if(a.score>b.score)return1;if(a.score<b.score)return0;if(a.name<b.name)return1;return0;}