sort 排序

问题背景

老韩让书名号出一道普通题,于是他出了nn道题(1−n)(1−n),让鱼人们去做,并让它们给出每道题的普通指数aiai,你能帮帮书名号,帮他把题目按照普通度排序么? 与上次不同的是,如果普通指数相同,你需要按照编号从大到小排列。
输入格式

第一行一个整数nn,代表题目的数量。 第二行nn个数字,代表每道题的普通指数。
输出格式

一行nn个数,代表排序好的题目编号(请不要在末尾留空格)
样例一
input

5
1 2 3 3 4

output

1 2 4 3 5

数据范围与约定

对于 10%的数据,普通指数不存在重复。 对于 20%的数据,n<=1000n<=1000。 对于 70%的数据,n<=10000n<=10000。 对于 100% 的数据,ai<=10000ai<=10000, n<=200000n<=200000,aiai 与 nn 都为正数。

时间限制: 1s1s

内存限制: 256MB256MB
提示

这是一道双关键字排序题,用桶其实也可以
题目来源:

C++ 语言基础测试

老韩第一次教sort

#include<iostream>
#include<algorithm>
#include<cstdio>
using namespace std;

struct item{
    int ai, no;
};

bool cmp(item a, item b){
    if(a.ai<b.ai)   return true;
    if(a.ai>b.ai)   return false;
    if(a.ai==b.ai){
        if(a.no<b.no)   return false;
        else            return true;
    }
}

int n;
item d[200010];

int main(){
    scanf("%d", &n);
    for(int i=1; i<=n; i++){
        scanf("%d", &d[i].ai);
        d[i].no=i;
    }
    sort(d+1, d+n+1, cmp);
    for(int i=1; i<n; i++)
        printf("%d ", d[i].no);
    printf("%d\n", d[n].no);
    return 0;
}

这个函数需要用到#include
using namespace std;

原来觉得自己懂了cmp的用法,但是今天做题,因为cmp函数一直WA,所以又查了查关于cmp的用法。

然后准备写下来自己的想法,避免以后在此忘记。

格式为

bool cmp(T ,x, T y)

{

if(x>y)

return 1;

else

return 0;

}

如果0, 那么函数就会将他们互换位置, 1就会保持原来位置不变。

返回类型如果是Bool类型的话 就是true=1,false=0;

如果返回是0的话,那么它就会交换位置,如果是1,代表不需要动。

sort 函数集锦
头文件:
语法:
sort(指针first, 指针last);
sort(指针first, 指针last, 比较函数cmp);
区间[first, last)之间的元素被升序排序
比较函数cmp需要实现“<”判断规则
sort时间复杂度逼近nlogn
sort排序是不稳定的

stable_sort()
实现稳定的排序
使用方法同sort()

reverse()
语法:
reverse(指针first, 指针last);
将区间[first, last)内的元素逆序重放。

reverse_copy()
语法:
reverse(指针first, 指针last, 指针result);
将区间[first, last)内的元素逆序并重新放置在指针result指向的空间内。

copy()
语法:
copy(指针first, 指针last, 指针result);
将区间[first, last)内的元素顺序拷贝到指针result指向的空间内。

copy_backward()
语法:
copy_backward(指针first, 指针last, 指针result);
将区间[first, last)内的元素逆序拷贝到以指针result结尾的空间内。
应用:批量移动(后移)元素

fill()
语法:
fill(指针first, 指针last, val);
将区间[first, last)内的元素全部置为val。

fill_n()
语法:
fill_n(指针start, Size n, val);
将指针start开始的空间的前n个元素的值置为val。

©️2020 CSDN 皮肤主题: 大白 设计师: CSDN官方博客 返回首页
实付0元
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值