sort函数

一、简介

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

 

你可能感兴趣的:(sort函数,排序算法)