排序算法為競賽中最常用的算法之一,我們可以利用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 }
完。