排序算法

经典排序算法C++实现(10种) C++实现经典排序算法插入排序希尔排序(缩小增量排序)选择排序堆排序冒泡排序冒泡排序的原理:快速排序合并排序折中排序新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章U... 阅读详情

C++排序算法

1.选择排序(Selection Sort)
选择排序是我接触的第一个排序算法,时间复杂度为O(n²),是一个不稳定的排序

#include<iostream>
#include<cstdio>
#define M 20050
#define FOR(i,a,b) for(int i=(a),i##_end_=(b);i<=i##_end_;++i)
#define DOR(i,a,b) for(int i=(a),i##_end_=(b);i>=i##_end_;--i)
using namespace std;
int n;
int A[M];
int main(){
    cin>>n;
    FOR(i,1,n)scanf("%d",&A[i]);
    FOR(i,1,n){
        int k=i;
        FOR(j,i+1,n){
            if(A[j]<A[k])k=j;
        }
        if(k!=i)swap(A[i],A[k]);
    }
    FOR(i,1,n)printf("%d ",A[i]);
    return 0;
}

2.插入排序(Insertion Sort)
复杂度O(n²)稳定排序

#include<iostream>
#include<cstdio>
#define M 23333
#define FOR(i,a,b) for(register int i=(a),i##_end_=(b);i<=i##_end_;++i)
#define DOR(i,a,b) for(register int i=(a),i##_end_=(b);i>=i##_end_;--i)
using namespace std;
int A[M];
int n;
int main(){
    cin>>n;
    FOR(i,1,n)scanf("%d",&A[i]);
    FOR(i,1,n){
        int x=A[i];
        int j;
        for(j=i-1;j>0&&A[j]>x;j--)A[j+1]=A[j];
        A[j+1]=x;//注意是j+1
    }
    FOR(i,1,n)printf("%d ",A[i]);
    return 0;
}

3.冒泡排序(Bubble Sort)
复杂度O(n²)稳定排序

#include<iostream>
#define M 23333
#define FOR(i,a,b) for(register int i=(a),i##_end_=(b);i<=i##_end_;++i)
#define DOR(i,a,b) for(register int i=(a),i##_end_=(b);i>=i##_end_;--i)
using namespace std;
int A[M];
int n;
int main() {
    cin>>n;
    FOR(i,1,n)scanf("%d",&A[i]);
    int t;
    FOR(i,1,n-1) {
        bool f=true;//判断是否发生冒泡
        FOR(j,1,n-i) 
            if(A[j]>A[j+1]) 
                t=A[j],A[j]=A[j+1],A[j+1]=t,f=false;
        if(f)break;
    }
    FOR(i,1,n)printf("%d ",A[i]);
    return 0;
}

4.计数排序(Counting Sort)
复杂度O(n+m)稳定排序

int cnt[105],A[105],B[105];
void sort(int n){
    FOR(i,1,n){
        int x;
        scanf("%d",&A[i]);
        cnt[A[i]]++;
    }
    FOR(i,1,100){
        cnt[i]+=cnt[i-1];
    }
    FOR(i,1,n){
        B[cnt[A[i]]]=A[i];
        cnt[A[i]]--;
    }//B为排好序后的数组 
}

5.基数排序(Radix Sort(Gay Sort))
计数排序的升级版,复杂度玄学
稳定排序(最快的排序算法(小C是这么说的))

#include<iostream>
#include<cstring>
#define FOR(i,a,b) for(register int i=(a),i##_end_=(b);i<=i##_end_;++i)
#define DOR(i,a,b) for(register int i=(a),i##_end_=(b);i>=i##_end_;--i)
using namespace std;
const int P=(1<<16)-1;
const int N=1<<16;
int A[100005];
int B[100005];
int cnt[N+5];
void sort(int n) {
    memset(cnt,0,sizeof(cnt));
    FOR(i,1,n)cnt[A[i]&P]++;
    FOR(i,1,N)cnt[i]+=cnt[i-1];
    DOR(i,n,1)B[cnt[A[i]&P]--]=A[i];
    memset(cnt,0,sizeof(cnt));
    FOR(i,1,n)cnt[(B[i]>>16)&P]++;
    FOR(i,1,N)cnt[i]+=cnt[i-1];
    DOR(i,n,1)A[cnt[(B[i]>>16)&P]--]=B[i];
}
int n;
int main() {
    cin>>n;
    FOR(i,1,n)scanf("%d",&A[i]);
    sort(n);
    FOR(i,1,n)printf("%d ",A[i]);
    return 0;
}

6.归并排序(Merge Sort)
复杂度(O(nlog(n)))稳定排序

#include<iostream>
#include<cstdio>
#define M 100086
#define FOR(i,a,b) for(int i=(a),i##_end_=(b);i<=i##_end_;++i)
#define DOR(i,a,b) for(int i=(a),i##_end_=(b);i>=i##_end_;--i)
using namespace std;
int A[M];
struct SORT{
    int tmp[M];
    void sort(int L,int R){
        if(L==R)return;
        int mid=(L+R)>>1;
        sort(L,mid);
        sort(mid+1,R);
        int i=L,j=mid+1,k=L;
        while(i<=mid&&j<=R){
            if(A[i]<=A[j])tmp[k++]=A[i++];
            else tmp[k++]=A[j++];
        }
        while(i<=mid)tmp[k++]=A[i++];
        while(j<=R)tmp[k++]=A[j++];
        FOR(l,L,R)A[l]=tmp[l];
    }
}Merge;
int main(){
    int n;
    cin>>n;
    FOR(i,1,n)scanf("%d",A+i);
    Merge.sort(1,n);
    FOR(i,1,n)printf("%d ",A[i]);
    return 0;
}

7.快速排序(Quick Sort)
复杂度(O(nlog(n))) 不稳定的排序算法

#include<iostream>
#include<algorithm>
#include<ctime>
#define M 100086
using namespace std;
int n;
int A[M];
string a,b;
void Sort(int L,int R){
    if(L>R)return;
    int low=L,high=R;
    int x=rand()%(R-L+1)+L;
    swap(A[x],A[L]);
    int key=A[L];
    while(low<high){
        while(low<high&&A[high]>=key)high--;
        if(low<high)A[low]=A[high];
        while(low<high&&A[low]<=key)low++;
        if(low<high)A[high]=A[low];
    }
    A[low]=key;
    if(low-1>L)Sort(L,low-1);
    if(low+1<R)Sort(low+1,R);
}
int main(){
    srand(time(NULL));
    cin>>n;
    for(int i=1;i<=n;i++)scanf("%d",&A[i]);
    Sort(1,n);
    sort(A+1,A+n+1);
    for(int i=1;i<=n;i++)printf("%d ",A[i]);
    return 0;
}

8.堆排序(Heap Sort)
复杂度O(nlog(n)) 不稳定的排序

#include<iostream>
#define M 100086
#define FOR(i,a,b) for(int i=(a),i##_end_=(b);i<=i##_end_;++i)
#define DOR(i,a,b) for(int i=(a),i##_end_=(b);i>=i##_end_;--i)
using namespace std;
struct Heap{
    int heap[M];
    int size;
    void down(int k){
        while(2*k<=size){
            int a=2*k;
            if(a+1<=size&&heap[a]>heap[a+1])a++;
            if(heap[k]>heap[a])swap(heap[k],heap[a]);
            else break;
            k=a;
        }
    }
    void Sort(int n){
        size=n;
        DOR(i,n/2,1)down(i);
        FOR(i,1,n){
            printf("%d ",heap[1]);
            heap[1]=heap[size--];
            down(1);
        }
    }
}heap;
int main(){
    int n;
    cin>>n;
    FOR(i,1,n)scanf("%d",&heap.heap[i]);
    heap.Sort(n);
    return 0;
}
【C++】排序算法 冒泡排序、插入排序、选择排序、希尔排序、堆排序、归并排序、快速排序、计数排序、基数排序、桶排序、外排序 阅读详情

相关推荐

十大排序算法(C++版)

十大排序算法前言一、直接插入排序二、折半插入排序三、希尔排序总结 前言 什么是排序?   排序:将一组杂乱无章的数据按一定规律顺次排列起来。即,将无序序列排成一个有序序列(由小到大或由大到小)的运算。 排序方法的分类   按数据存储介质:内部排序和外部排序   按比较器个数:串行排序和并行排序   按主要操作:比较排序和基数排序   按辅助空间:原地排序和非原地排序   按稳定性:稳定排序和非稳定排序   按自然性:自然排序和非自然排序 一、直接插入排序 基本思想:   每步将一个待排序的对象

CltCj的博客 5409

常见的几种排序算法(c++)

常见的几种排序算法(c++)一、冒泡排序二、插入排序三、选择排序四、归并排序五、希尔排序六、快速排序七、堆排序八、基数排序1.LSD(低位到高位的排序)2.MSD(高位到低位排序)算法比较 一、冒泡排序 1、算法思想 冒泡排序是一种简单的排序算法,通过循环遍历,将临近的两个元素进行比较,满足排序规则时,进行下一组元素对比,当不满足排序规则时,将两个元素交换位置,再继续进行下一组元素对比,确保最大的...

low5252的博客 1万+

排序算法:稳定的排序算法

元素,并围绕主元对列表进行分区,将较小的元素放入低数组中,将所有较大的元素放入高数组中。然后,我们对他们的第十位的值进行排序。因此,我们可以对任意大小的列表进行排序,而无需在冒泡排序中使用任何额外的空间。我们可以说,子问题可以被视为对数组的一部分进行排序,从任何索引 s(start) 开始,到任何索引 e(end) 结束。正如我们上面所讨论的,最大堆是一个完全二叉树,其中每个内部节点中的值都大于或等于该节点的子节点中的值。此外,每次迭代后,已排序子数组的大小都会增加,而未排序子数组的大小会减少。

新华编程特战队 1858

十大经典排序算法

排序算法是《数据结构与算法》中最基本的算法之一。 排序算法可以分为内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存。常见的内部排序算法有:插入排序、希尔排序、选择排序、冒泡排序、归并排序、快速排序、堆排序、基数排序等。用一张图概括: 关于时间复杂度 平方阶 (O(n2)) 排序 各类简单排序:直接插入、直接...

nmslqwq的博客 861

八种排序算法

偶尔有看到排序算法,想起来大学里老师也有讲授过冒泡排序、快速排序等,不过现在已经没什么概念,一查发现排序算法有八种,有的甚至连名字都没听过,感概平时看的少。既然已经看到了,就干脆了解下基础概念,避免在后续学习途中,出现一看就懵逼的情况。   冒泡排序 冒泡排序是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。走访数列的工作是重复地进行直到...

dobat的博客 3348

排序算法总结及C++实现

文章目录1 引入 认识时间复杂度2 补充 对数器3 排序算法分析3.1 基于比较的排序3.1.1 冒泡排序3.1.2 选择排序3.1.3 插入排序3.1.4 归并排序补充题目 小和问题补充题目 逆序数3.1.5 快速排序3.1.6 堆排序3.2 非基于比较的排序3.2.1 计数排序3.2.2 桶排序3.2.3 基数排序4 排序总结4.1 稳定性4.2 工程中的综合排序算法4.3 有关排序...

李滚滚的博客 2223

九大排序算法再总结

如果要转载,需要注明出处: http://blog.youkuaiyun.com/xiazdong 本文是 http://blog.youkuaiyun.com/xiazdong/article/details/7304239 的补充,当年看了《大话数据结构》总结的,但是现在看了《算法导论》,发现以前对排序的理解还不深入,所以打算对各个排序的思想再整理一遍。 本文首先介绍了基于比较模型的排序算法,

xiazdong 31万+

排序算法 - 面试中的排序算法总结

排序算法总结 查找和排序算法是算法的入门知识,其经典思想可以用于很多算法当中。因为其实现代码较短,应用较常见。所以在面试中经常会问到排序算法及其相关的问题。但万变不离其宗,只要熟悉了思想,灵活运用也不是难事。 一般在面试中最常考的是快速排序和归并排序,并且经常有面试官要求现场写出这两种排序的代码。对这两种排序的代码一定要信手拈来才行。还有插入排序、冒泡排序、堆排序、基数排序、桶排序等。面试官对

从零开始 2982

「排序算法」十大经典排序算法

文章目录十大经典排序算法一、冒泡排序二、选择排序三、插入排序四、希尔排序五、归并排序六、快速排序七、堆排序八、计数排序九、桶排序十、基数排序 引用网站:菜鸟教程十大经典排序 十大经典排序算法 排序算法图片总结(图片来源于网络) 一、冒泡排序 冒泡排序(Bubble Sort)也是一种简单直观的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢

秋天,黄叶坠地,凉风有信。 6434

GIS坐标系转换以及空间校正和地理配准

许多小伙伴都对坐标系,投影这类问题迷迷糊糊,我之前也一样,现在总结一下。 坐标系的转换1.为什么要进行坐标系的转换?2. 不同坐标系的介绍1.地理坐标系我国常见的地理坐标(1).北京54坐标系(2).西安80坐标系(3).WGS-84坐标系(4).大地2000坐标系2.投影坐标系我国常用的投影坐标系(1) UTM投影(2) 高斯-克吕格投影(3) 兰伯特投影(4) 阿尔伯斯投影投影坐标系的选择3. 坐标系的转换1.已知坐标系之间的转换1.1 两坐标系的参考椭球相同1.2 两坐标系的参考椭球不一致,但是GIS

m0_47258611的博客 8913

RocketMQ源码分析之消息轨迹

文章目录前言一、消息轨迹二、消息轨迹源码分析1、producer端2、consumer端三、消息轨迹中存储的信息1.TraceContext2.TraceBean3.TraceType四、总结 前言   本篇文章将会从以下方面介绍消息轨迹:什么是消息轨迹?如何启用消息轨迹?示例demo、消息轨迹的源码分析和消息轨迹中存储的信息。最后会用一张图来总结消息轨迹的工作原理。 一、消息轨迹 1.什么是消息轨迹? 消息轨迹是用来跟踪记录消息发送、消息消费的轨迹。 2.如何启用消息轨迹? broker端 需要在b

不爱学习的小妞博客 1076

稳定排序算法有哪些

稳定排序算法有哪些 相信您已经掌握了很多种排序算法,比如冒泡排序、插入排序、希尔排序、选择排序等。这些排序算法中,有些是 “稳定” 的,有些是 “不稳定” 的。 给定的待排序序列中,经常会包含相同的元素,例如: 3 1 2 4 2 此序列中包含两个元素 2,为了区分它们,我们分别称它们为 “红 2” 和 “绿 2”。 评价一个排序算法是否稳定,是指该算法完成排序的同时,是否会改变序列中相同元素的相对位置。例如,上面序列中红 2 和绿 2 的相对位置是:红 2 位于绿 2 的左侧,或者说绿 2 位于红 2

ccc369639963的博客 1万+

数据分析——员工离职预测

员工离职预测一. 题目描述二. 数据说明三. 步骤实现1.导入并查看2.数据探索性分析3.数据处理4.模型分析5.结果分析(1) 可视化的结果分析(2)特征选择结果分析(3)多模型交叉验证结果分析 一. 题目描述 员工是否准备离职是困扰用人单位的问题,其关系到单位业务的开展及新人员的招聘,及时的分析出有离职倾向的员工成为关键的因素。数据主要包括影响员工离职的各种因素(工资、出差、工作环境满意度、工作投入度、是否加班、是否升职、工资提升比例等)以及员工是否已经离职的对应记录。 二. 数据说明 数据分为训练数据

weixin_43925467的博客 1万+

【排序算法】排序算法总结

排序算法总结,将排序算法的分类、稳定性和特点进行一个总结,并附有跳转到对应详解的链接,方便大家学习

weixin_52811588的博客 987

基于Python实现的捕鱼达人小游戏源代码+使用说明

摘要: 本文介绍了一款自制的捕鱼达人小游戏,使用Python3和Pygame模块开发。游戏包含完整的资源文件(图片、音效、字体)和源码结构(11个功能模块),实现了大炮移动射击、特殊子弹、炸弹、难度递增等核心玩法。安装需配置Python环境和Pygame模块,运行main.py即可启动游戏。游戏支持键盘控制(方向键移动、空格射击、1键放炸弹),默认时长600秒,包含开始菜单、游戏界面和结束界面。所有代码均有详细注释,项目已开源并提供下载链接。(150字)

2301_76484015的博客 667

Kimi K3大模型API实战:从调用到本地知识库问答系统构建

大语言模型(LLM)作为人工智能的核心技术,通过海量数据训练获得理解和生成自然语言的能力。其工作原理基于Transformer架构,通过自注意力机制捕捉长距离依赖关系。这项技术的核心价值在于能够将非结构化文本转化为可计算、可交互的智能体,极大地提升了信息处理和自动化任务的效率。在应用场景上,大模型广泛应用于智能对话、代码生成、文档总结与问答等领域。其中,国产大模型如月之暗面推出的Kimi K3,凭借其在**长文本处理**和**中文场景优化**方面的优势,为开发者提供了新的技术选项。本文将以Kimi K3为例

weixin_30694389的博客 299

排序算法详解

排序算法是计算机科学中最基础也最重要的算法之一。它将一组数据(例如数字列表、字符串集合)按照特定的顺序(升序或降序)重新排列。高效的排序算法对于优化其他算法(如搜索和合并算法)的效率至关重要。

m0_54069809的博客 1169

一步一步教你如何安装IP-Guard(客户端WINDOWS篇)

1、安装完服务器后,在服务器右下角有一个IP-GUARD图标:如图 2、点图标右键选注册: 3、注册成功后, 4、在开始菜单里选生成客户端安装包。 5、生成客户端安装包成功,安装名字可以任意,但是最好是英文名字。 6、将客户端安装程序复制到桌面。 7、退出所有杀毒软件、安全卫士、电脑管家等然后运行 8、安装完成后,立即重启计算机。IPguard客户端安装完成。 9、这样在控制里就可以看到已经安装客户端的计算机,在线显示蓝色,灰色表示计算机已经离线货关机 ...

IP-Guard专栏 5629

什么是排序算法?常见的排序算法有哪些?

计数排序适用于数据范围较小且已知的情况,其时间复杂度为线性时间,非常适合处理小范围内的数据排序。基数排序适用于整数排序,特别是当数据范围较大但数据量适中时。它通过多次应用计数排序来实现多轮排序,从而克服了传统排序算法在处理大范围数据时的效率问题。

破损的天堂鸟博客 1227

Android Binder的两三事--基于Android14源码

Android14-Framework-Binder

保持专注,保持热爱 1141

【大模型工程局】告别单打独斗:手把手带你构建多智能体系统(MetaGPT 启示录)

想象一下,不再是只有一个全知全能的 AI,而是有一群各有所长、能够独立思考和行动的“智能体”(Agent)。它们生活在一个共同的环境中,可以相互交流、协作完成共同目标,也可能为了有限资源而相互竞争。这就是多智能体系统(MAS)的核心图景。MAS 的关键特征:自治性 (Autonomy):每个智能体都能独立感知环境、做出决策并执行动作,无需外部直接控制。交互性 (Interaction):智能体之间可以通过某种通信机制(显式或隐式)交换信息、协调行为。

高校图书馆高级系统架构师/研究馆员,推动高校AI从概念演示到可评审、可交付、可运维:路线图与立项评审、PoC交付、评测回归与上线运维(Baseline/Eval/Ops)。 1186

排序算法总结

1.排序算法分类 基础的排序算法包含冒泡排序、选择排序、插入排序、希尔排序、堆排序、归并排序及快速排序。 根据实现类型可分为插入排序类、选择排序类、交换排序类及归并排序类。 2.排序算法的综合分析 各算法的排序方式、平均情况、最好最坏情况、所需的辅助空间及稳定性如下: 事实上,排序算法没有十全十美,本来想写一套模拟测试的数据来验证孰优孰略。但是突然发现可比性不高,需要根据

黄俊彬 2541

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

十大排序算法

算法稳定性:单次比较后,两个值相等的邻近元素的位置在排序后,相对位置没有改变。

一名想做出点成就的后端~ 1429

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

排序算法-10种排序算法

文章目录一、排序算法是什么?1.解释2.内部排序3.外部排序二、排序算法介绍及实现1.冒泡排序算法描述四、测试 一、排序算法是什么? 1.解释 这里引入百度百科的解释: 谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。 排序算法,就是如何使得记录按照要求排列的方法。排序算法在很多领域得到相当地重视,尤其是在大量数据的处理方面。一个优秀的算法可以节省大量的资源。 在各个领域中考虑到数据的各种限制和规范,要得到一个符合实际的优秀算法,得经过大量的推理和分析。 2.内

GGB__的博客 933

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

下一篇: NOIP2014 DAY1 模拟赛赛后总结
Shima_KaZe
博客等级 码龄9年 16粉丝 18原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值