1、头文件:#include
2、时间复杂度:类似于快排,为nlog(2)n,效率较高
3、sort函数有三个参数:
(1)要排序数组的起始地址
(2)要排序数组的最后一个数据元素的下一个地址
(3)排序方法,如果没有排序方法的话,默认从小到大排序
1、sort函数实现数的排序
#include
#include
#include
#include
using namespace std;
bool cmp(int a,int b)///实现从大到小排序的比较函数
{
return a>b;
}
int main()
{
int i,j;
int arr[10]={1,33,56,74,34,34,555,43,43,343};
sort(arr,arr+10,cmp);
for(i=0;i<10;i++)
cout<
2、sort函数实现字符串的排序(根据长度,字母顺序两种情况)
(1)sort函数对string内的字符进行排序(string为字符串类型数据)
#include
#include
#include
#include
using namespace std;
bool cmp(char a,char b)///比较函数
{
return a>b;
}
int main()
{
string s;
cin>>s;
sort(s.begin(),s.end());///从小到大
cout<
(2)sort对一维字符数组内的字符进行排序
#include
#include
#include
#include
using namespace std;
bool cmp(char a,char b)///比较函数
{
return a>b;
}
int main()
{
char a[100];
scanf("%s",a);
sort(a,a+strlen(a));///从小到大
cout<
(3)sort对string类型的数组按照字典序排序
#include
#include
#include
#include
#include
using namespace std;
bool cmp(string a,string b)///按照字典序从大到小排序
{
return a>b;
}
int main()
{
int i,j;
string s[12]=
{
"January",
"February",
"March",
"April",
"May",
"June",
"July",
"August",
"September",
"October",
"November",
"December"
};
sort(s,s+12);///字符串默认按照字典序从小到大排序,数默认按照大小从小到大排序
for(i=0;i<12;i++)
cout<
(4)sort对char类型的二维数组进行字典序排序
错误,不能这样做。同样也不能进行根据字符串长度的排序
解决方法有:1、使用qsort 2、改用string
(5)sort对string类型的数组根据长度进行排序
#include
#include
#include
#include
#include
using namespace std;
bool cmp1(string a,string b)///按照长度从小到大排序
{
return a.length()b.length();
}
int main()
{
int i,j;
string s[12]=
{
"January",
"February",
"March",
"April",
"May",
"June",
"July",
"August",
"September",
"October",
"November",
"December"
};
sort(s,s+12,cmp1);///按照长度从小到大排序
for(i=0;i<12;i++)
cout<
6、对结构体数组进行排序(根据结构体中的某元素)
#include
#include
#include
#include
using namespace std;
const int n=3;
struct Student
{
char name[20];///姓名
char id[20]; ///学号
int score; ///成绩
int r; ///排名
}stu[100010];
/*
(1)如果两个学生的分数不同,则分数高的排在前面
(2)否则,将姓名字典序小的排在前面
*/
bool cmp(Student a,Student b)
{
if(a.score!=b.score) return a.score>b.score;
else return strcmp(a.name,b.name)<0;
}
/*
排名的实现,一般规则为:分数不同,排名不同,分数相同排名相同但占用同一个排位
例如:分数为90,88,88,88,86;排名为1,2,2,2,5
*/
void Rank()
{
int i,j;
stu[0].r=1;
for(i=1;i