sort函数和qsort函数

sort

1.使用sort函数必须用头文件#include < algorithm>和using namespace std;
2.sort函数可以是三个参数也可以两个参数。
3.(1)第一个参数表示所要排序的数组的起始地址
(2) 第二个参数表示最后一位要排序的地址
(3)第三个参数表示排序是从大到小(降序)还是从小到大(升序),如果不写第三个参数,则默认为从小到大排序

数组排序

不带参数的情况

#include<stdio.h>
#include<algorithm>
using namespace std;
int main()
{
    int a[10]={5,6,7,8,0,4,9,1,3,2};
    int i;
    sort(a,a+10);
    for(i=0;i<10;i++)
    printf("%d ",a[i]);
    printf("\n");
    return 0;
}

输出结果为
在这里插入图片描述

带参数的情况

#include<stdio.h>
#include<algorithm>
using namespace std;
bool cmp(int a,int b)   //int代表数组数据的类型
{
 return a>b; //a>b代表降序,如果是a<b代表升序
}
int main()
{
    int a[10]={5,6,7,8,0,4,9,1,3,2};
    int i;
    sort(a,a+10,cmp);   //cmp是自定义函数;
    for(i=0;i<10;i++)
    printf("%d ",a[i]);
    printf("\n");
    return 0;
}

结构体排序

#include<stdio.h>
#include<algorithm>
using namespace std;
struct student{
    char name[10];
    int number;
    double sorce;
}stu[10];
bool cmp(student a,student b)    //student表示数据的类型
{
     return a.sorce>b.sorce;  //表示以sorce为标准降序排序,结构体中的其他成员也会随sorce移动
}
int main()
{
    int i;
    for(i=0;i<10;i++)
    scanf("%s%d%lf",&stu[i].name,&stu[i].number,&stu[i].sorce);
    sort(stu,stu+10,cmp);
    for(i=0;i<10;i++)
        printf("%s,%d,%.2lf\n",stu[i].name,stu[i].number,stu[i].sorce);
    printf("\n");
    return 0;
}

qsort

void qsort ( void * base, size_t num, size_t size, int ( * comparator ) ( const void *, const void * ) );

base:指向第一个元素的指针,即数组首地址

num:要排序的元素个数,及数组长度

size:数组元素的大小,一般写成sizeof(base[0])

comparator:自己写的比较函数了

字符串数组排序

#include<iostream>
#include<cstring>
using namespace std;
const int maxn=1e5+10;
char word[maxn][25];
int cmp(const void *p1,const void *p2)
{
    char *s1 = (char *)p1;
    char *s2 = (char *)p2;
    return strcmp(s1,s2);
}
int main()
{
    int n;
    cin >> n;
    for(int i=0;i<n;i++) {
        cin >> word[i];
    }
    qsort(word,n,sizeof(word[0]),cmp); // n表示字符串的个数
    for(int i=0;i<n;i++) {
        cout << word[i] << endl;
    }
    return 0;
}
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值