c++排序(第一章----桶排序与sort排序)

众所周知,在c++中排序是一种非常重要的算法体现,穿插于大大小小的题目当中,基础的排序大多在CCF GESP C++ 四级的知识点中,所以,要入门c++,学会排序是必不可少的。

我们先来学习较为简单的桶排序。

【算法介绍】

桶排序的思想:

若待排序的值在一个有限范围内(整型)时,可设计有限个有序桶,桶号就是待排序的值。

之后,将待排序的值依次装入对应的有序桶中(重复值都装入对应的桶),然后顺序输出各桶的值,便得到有序的序列。

【算法代码】

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;
const int maxn=500;
int a[maxn];
int main() {
    int n;
    cin>>n;
    int x;
    for(int i=1; i<=n; i++) {
        cin>>x;
        a[x]++;
    }
 
    for(int j=1; j<=maxn; j++) {
        while(a[j]>0) {
            cout<<j<<" ";
            a[j]--;
        }
    }
    return 0;
}

由于桶排序需要创建多个桶,特别占用空间,尤其是它的时间复杂度也达到了O(n²),所以在信息学奥赛中不经常用。

接下来我们介绍sort排序。

【算法介绍】

sort是一个非常方便的排序算法,与其他不同,它不用长篇大论的打(代码),只需要套用就行,非常方便,时间复杂度也只有O(log2n),所以在许多比赛中也经常出现,它的格式是这样的:

cpp 复制代码
sort(数组名+开始下标,数组名+开始下标+结束下标)
//这样做到的默认是从小到大排序。

当然,如果想要从大到小排,需要自己写一个函数为排序规则。

【算法代码】

从小到大排:

cpp 复制代码
#include <bits/stdc++.h>
using namespace std;
 
const int maxn=100;
int a[maxn];
 
int main() {
    int n;
    cin>>n;
    for(int i=1; i<=n; i++) cin>>a[i];
 
    sort(a+1,a+1+n);
    for(int i=1; i<=n; i++) {
        cout<<a[i]<<" ";
    }
 
    return 0;
}

从大到小排:

cpp 复制代码
​
#include <bits/stdc++.h>
using namespace std;
 
const int maxn=105;
int a[maxn];
 
int cmp(int a,int b){ 
    return a>b;
    }
 
int main() {
    int n;
    cin>>n;
    for(int i=1; i<=n; i++) {
        cin>>a[i];
    }
    
    sort(a+1,a+1+n,cmp);
    for(int i=1; i<=n; i++) {
        cout<<a[i]<<" ";
    }
 
    return 0;
}

​

本期就这样愉快地结束了(求赞求关)。

相关推荐
踮起脚看烟花19 小时前
多人聊天室实现v2.0
c++·信息与通信
梦帮科技20 小时前
UE5 GAS 实战:用 Gameplay Ability System 搭建「赛博修真」境界与技能体系
c++·人工智能·python·ue5·c#
旖-旎20 小时前
QT系统篇(5)(下)
开发语言·c++·qt
99乘法口诀万物皆可变20 小时前
PcanToVectorXL_V01:打通 Vector 与 PCAN 的双向 CAN/CAN‑FD 桥梁
c++·学习
liulun20 小时前
C++ WinRT中的事件
开发语言·c++
whitelbwwww20 小时前
c++运行onnx模型
开发语言·c++
C路在脚下21 小时前
HSMS 连接总失败?排查这 5 个配置点
c++·嵌入式硬件
金融小师妹21 小时前
人工智能推演框架:非农降温信号如何重构黄金定价模型
数据结构·人工智能·机器学习·transformer
郝学胜_神的一滴1 天前
Qt 高级编程 034:深耕QWidget底层内核—彻底吃透无边框窗口设计核心原理
c++·qt
QiLinkOS1 天前
第三视觉理解徐玉生与他的商业活动(26)
大数据·c++·人工智能·算法·开源协议