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;
}

​

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

相关推荐
小小晓.25 分钟前
C++单例模式万字详解:6种实现演进+线程安全彻底解决+CRTP终极模板
c++·单例模式
j7~2 小时前
【C++11】C++11 新特性全套详解(列表初始化、右值引用、lambda 表达式、function 与 bind 包装器等)
c++·右值引用·lambda表达式·可变参数模板·移动语义·包装器·c++11发展史
无小道2 小时前
C/C++——可变参数
c语言·开发语言·c++·可变参数
hele_two2 小时前
C++模拟蚁群(二)
c++·算法·数学建模·图形渲染
WK100%2 小时前
LeetCode双题:滑动窗口破解最小子数组
c++·经验分享·笔记·算法
@福者3 小时前
C++ QT 入门
开发语言·c++·qt
沧海一笑-dj3 小时前
【C++】Visual Studio 2026下载和安装
c++·visual studio·vs·vs2026
HugoStudio_SWAN3 小时前
洛谷 P1321 单词覆盖还原——从蜡板上的密信到数字水印
c++·学习·程序人生·算法
励志不掉头发的内向程序员3 小时前
【LibreCAD 2D架构】从鼠标点击到屏幕像素:LibreCAD绘图架构全链路解析之Action与命令系统
linux·开发语言·c++·qt·学习·系统架构
Lost of 程序猿3 小时前
.NET 线程安全集合与并发数据结构深度实战:从 lock 到无锁
数据结构·安全·.net