赞
踩
sort()排序是C++中自带的排序算法函数。排序过程相对于堆排序、希尔排序等其他排序算法较简单。
sort()排序函数的调用首先需要头文件algorithm:是“算法”的意思。
sort()函数有三个参数sort(begin, end, 参数三)。begin为指向待sort()的数组的第一个元素的指针,end为指向数组的最后一个元素的下一个位置的指针,参数三为排序方式,参数三如果不写,默认从小到大进行排序。将参数三写为greater()就是从大到小进行排序。<>中也可以写double、long、float等等,看我们变量类型了。
简单数组排序:
#include <iostream>
#include<algorithm>
using namespace std;
int main()
{
int a[6]={6,2,3,1,5,10};
sort(a,a+6);
for(int i=0;i<6;i++)
cout<<a[i]<<" ";
return 0;
}
输出:1 2 3 5 6 10
这里可以看到是sort(a,a+10),但是数组a一共只有9个元素,为什么是a+10而不是a+9呢?
因为sort方法实际上最后一位地址对应的数是不取的,而且vector,set,map这些容器的end()取出来的值实际上并不是最后一个值,而end的前一个才是最后一个值!
需要用prev(xxx.end()),才能取出容器中最后一个元素。
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
int num[10] = { 9,5,6,0,8,7,4,3,2,1 };
sort(num, num + 10, greater<int>());
for (int i = 0; i < 10; i++) {
cout << num[i] << " ";
}
return 0;
}
输出 9 8 7 6 5 4 3 2 1 0
不只可以按照从大到小或从小到大的顺序排序,也可以在外部自定义一个函数,然后将此函数作为参数传递到sort()函数中的参数三处。因此达到按照自己需要的方式进行排序的目的。
#include<iostream> #include<algorithm> using namespace std; int larger(int x, int y) { return x % 10 > y % 10; } int main() { int a[10] = { 6,25,31,9,25,16,34,17,28,61 }; sort(a, a + 10,larger); for (int i = 0; i < 10; i++) { cout << a[i] << " "; } return 0; }
输出:9 28 17 6 16 25 25 34 31 61
sort()函数排序算法应用范围很广,适用于多种语言,同时又适用于数组、结构体等。
对string型 按字典序排序
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
int main()
{
string str("hello world");
sort(str.begin(),str.end());
cout<<str;
return 0;
}
输出:dehllloorw
对结构体排序
对于结构体排序其实也不难,只是需要我们自己重写cmp函数
例如要对结构体中的元素b按照升序排序。
#include<bits/stdc++.h> using namespace std; struct node{ int a; int b; }; bool cmp(node time1,node time2) { return time1.b<time2.b; } int main() { int n; cin>>n; node time[n+10]; for(int i=0;i<n;i++) cin>>time[i].a>>time[i].b; sort(time,time+n,cmp); for(int i=0;i<n;i++) { cout<<time[i].a<<" "<<time[i].b<<endl; } return 0; }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。