c++STL之sort排序


      排序算法為競賽中最常用的算法之一,我們可以利用C++自帶的庫函數進行排序。
                                                                                      ————《信息學奧賽一本通》

      

 1 #include<iostream>
 2 #include<algorithm> 8 int main()
 9 {
10     int a[10000]; 
11     int n;
12     std::cin>>n;
13     for(int i=0;i<n;i++)
14     {
15         std::cin>>a[n];//輸入
16     }
17     std::sort(a+0,a+n);//sort 排序 含義:升序排序a數組的第0位到a數組的第n位
18     for(int i=0;i<n;i++)
19     {
20         std::cout<<a[n];//輸出
21     }
22     return 0;
23 }

以上是最最簡單的一個用sort排序的程序

讀者可能有疑問了,難道sort只能升序排序嗎?

其實不然。sort默認確實是升序排序,不過你可以自己定義排序規則,比如說下面這樣:

 1 #include<iostream>
 2 #include<algorithm>
 3 int aa(int x,int y)    自己定義的排序規則,可以實現降序排序
 4 {
 5     if(x>y) return 1;
 6     else return 0;
 7 }
 8 int main()
 9 {
10     int a[10000]; 
11     int n;
12     std::cin>>n;
13     for(int i=0;i<n;i++)
14     {
15         std::cin>>a[n];
16     }
17     std::sort(a+0,a+n,aa);//排序a數組的第0位到第n位,用自己定義的aa排序規則
18     for(int i=0;i<n;i++)
19     {
20         std::cout<<a[n];
21     }
22     return 0;
23 }

這里定義的aa函數,就是你進行sort排序時的規則,這里這個規則可以隨你寫,比如說按照其他特征排序,如:關鍵字等等,而且其中的排序規則可以有多個,比如說下面這個:

1 int aa(const student & a,const student &b)
2 {
3     if(a.score>b.score) return 1;
4     if(a.score<b.score) return 0;
5     if(a.name<b.name) return 1;
6 }

這個是對一個結構體中的數據進行排序,排序的規則是按照結構體中score的大小降序排序,如果兩個score相等,就按照name的字典序升序排序,相信大家動能看得懂。

下面貼出一個例題:

Combination

   (iknowss.cpp)

Description

有 n 個正整數,偉大的中國人民要把它們連接成一排,形成一個最大的integer。

舉個栗子:n=3 時,3 個整數 1,3,4 聯接成的最大整數為:431 又如:n=4 時,4 個整數 7,13,4,246 聯接成的最大整數為:7424613

Input

N后跟n個正整數。

Output

連成的最大數

Hint

   對於前7個數據,n<=100000

   對於第8個數據,n<=10000

   對於第9個數據,n<=1000

   對於第10個數據,n<=100

   對於所有數據,integer<=10^10

  

數據隨機,略弱=-=

 

 (以上又是二貨學長改自noip題)

這個題最簡單的方法就是用字符串格式輸入的這幾個數,按照字符串字典序sort,再降序輸出就可以了(為什么這次學長出的題這么水。。。於是我就有時間多講了點sort。。。)

以下貼出源代碼:

 1 #include<cstdio>
 2 #include<iostream>
 3 #include<string>
 4 #include<algorithm>
 5 using namespace std;
 6 int aa(string x,string y)
 7 {
 8     if(x>y) return 1;
 9     else return 0;
10 }
11 int main()
12 {
13     freopen("iknowss.in","r",stdin);
14     freopen("iknowss.out","w",stdout);
15     int n;
16     string zong[100001];
17     cin>>n;
18     for(int i=0;i<n;i++)
19     {
20         string zhong;
21         cin>>zhong;
22         zong[i]=zhong;
23     }
24     sort(zong+0,zong+n,aa);
25     for(int i=0;i<n;i++)
26     {
27         cout<<zong[i];    
28     }
29     return 0;
30 } 

完。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM