数据结构与算法笔记 —— 排序算法及代码实现

【数据结构排序算法系列】数据结构八大排序算法 排序算法在计算机应用中随处可见,如Windows操作系统的文件管理中会自动对用户创建的文件按照一定的规则排序(这个规则用户可以自定义,默认按照文件名排序)因此熟练掌握各种排序算法是非常重要的,本博客将对数据结构中常见的八大排序算法进行详细的讲解。 写在前面的话:首先要明白在学习同类型的排序算法时,一定要明白任何相同领域存在的东西一定是竞争之后的结果,所以对于相同类型的排序之所以能够存在多种被人熟 阅读详情

数据结构与算法笔记 —— 排序算法及代码实现


一. 直接插入排序

直接插入排序是向一个已经排序好的序列中插入一个数,但是,插入此数后,序列的仍然有序。改算法的时间复杂度为 O(n2) ,时间复杂度较高。适合小规模排序。
插入排序的基本思想是:每步将一个待排序的纪录,按其关键码值的大小插入前面已经排序的文件中适当位置上,直到全部插入完为止。过程如下图
这里写图片描述

//  c/c++
void    InsertSort(int *num,int length){
    int t;
    for (int i=1;i<length;i++){
        t = num[i];
        int j = i-1;
        while(j>=0 && t < num[j]){
            num[j+1] = num[j];
            j--;
        }
        num[j+1] = t;
    }
}

二. 冒泡排序算法

冒泡排序的时间复杂度为 O(n2),冒泡排序算法的运作如下:
1. 比较相邻的元素。如果第一个比第二个大,就交换他们两个。
2. 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
3. 针对所有的元素重复以上的步骤。
4. 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。

//  c/c++
void    BubbleSort(int *num,const int length){
    int tmp;
    for (int i=0;i<length;i++){
        for(int j=i+1;j<length;j++){
            if (num[i]>num[j]){
                tmp = num[i];
                num[i] = num[j];
                num[j] = tmp;
            }
        }
    }
}

三. 希尔排序

希尔排序是一种插入排序,它是将整个有序序列分割成若干小的子序列分别进行插入排序,使用增量分组的思想进行排序。
排序过程:先取一个正整数 d1<n, 把所有序号相隔 d1 的数组元素放一组,组内进行直接插入排序,然后取 d2<d2 ,重复上述分组和排序操作;直至 di=1,即所有记录放进一个组中排序为止,希尔排序的时间复杂度为O(n1.2)。

//  c/c++
void    ShellSort(int *num,int length){
    int l = length/2;
    while(l){//轮换组数
        for (int i=l;i<length;i++){ //插入排序      
            int t=num[i];
            int m =i-l;
            while(m>=0 && t<num[m]){
                num[m+l] = num[m];
                m -= l;
                continue;
            }
            num[m+l] = t;           
        }
        l >>=1;
    }   
}

四. 选择排序

核心思想:减而治之。在一趟扫描后,找出最小的项,放在最前面并将该项去除,从而降低数据项长度,形成新的数据链继续进行。算法时间复杂度O(n2)。

//  c/c++
void    ChooseSort(int *num,int length){
    int m=0;
    for (int i=0;i<length;i++){
        m = i;
        for(int j=i+1;j<length;j++)
            if (num[j]<num[m]) m=j;
        int t =0;
        t = num[i];
        num[i] = num[m];
        num[m] = t;
    }
}

五. 快速排序

排序思想:每进行一次遍历都将比关键值大的数放在关键值后面,比关键值小的数放在关键值前面。然后分成两组进行递归。其算法时间复杂度为$O(n^{2})$。
// c/c++
void QuickSort(int *num,int left,int right){
    if(left >= right){
        return;
    }   
    int j = right;
    int i = left;
    int k = num[left];

    while(i<j){
        while(i<j && k <= num[j]) j--;
        num[i] = num[j];
        while(i<j && k >= num[i]) i++;
        num[j] = num[i];
    }
    num[i] = k;
    QuickSort(num,left,i-1);
    QuickSort(num,i+1,right);
}

六. 归并排序

核心思想:如下图,将数组全部分开,然后两两合并。算法时间复杂度O(nlogn)

这里写图片描述

// c/c++
void    MergeSort(int *num,int *temp,int start,int middle,int end){
    int i = start;
    int j = middle+1;
    int k = start;
    while(i != middle+1 && j!=end+1){
        if(num[i]>= num[j]) temp[k++] = num[j++];
        else temp[k++] = num[i++];
    }
    while(i != middle+1) temp[k++] = num[i++];
    while(j != end+1) temp[k++] = num[j++];
    for(i=start;i<=end;i++)num[i]=temp[i];
}
void    Merge11(int *num,int *temp,int start,int end){
    int middle = 0;
    if(start < end){
        middle = (start+end)/2;
        Merge11(num,temp,start,middle);
        Merge11(num,temp,middle+1,end);
        MergeSort(num,temp,start,middle,end);
    }
}

参考文献

数据结构与算法(C++版)学习笔记 先学后练2.先学经典,再去拓展延伸3. C/C++数据结构数组、链表、串、栈、队列…经典算法冒泡算法、BF算法… 阅读详情

相关推荐

LightGBM处理类别特征和缺失值有多省心?一个真实业务数据案例带你上手

本文通过真实电商数据案例,详细解析了LightGBM如何高效处理类别特征和缺失值。相比传统方法,LightGBM仅需一行代码即可自动处理高基数类别特征和缺失值,大幅提升模型训练效率和预测准确度,特别适合业务场景中的脏数据处理。

weixin_30689307的博客 460

数据结构学习笔记——插入排序(直接、折半插入、希尔排序)

一、排序算法的稳定性 排序就是使无序的序列排列成有序的序列,针对两个元素,其对应的关键字相同,若待排序的元素中有两个元素A和B,未排序前A的位置在B的前面,若经排序算法后,A仍在B的前面,则说明这个排序算法是稳定的,即`经过排序后能使关键字相同的元素保持原本顺序中的相对位置不变`,则称这个算法是**稳定的**,反之则不稳定。另外,算法的稳定性并不代表该排序算法的优劣。

小宇y的博客 4328

保姆级教程:用YOLOv5s训练PCB缺陷检测模型(附北大公开数据集)

本文提供了一份基于YOLOv5s的PCB缺陷检测模型从零开始的完整实战教程。详细解析了如何使用北大公开数据集,涵盖环境搭建、数据处理、模型训练、性能评估及优化部署全流程,并针对工业场景中常见的类别不均衡问题给出了具体解决方案,旨在帮助开发者快速构建高精度的自动化质检系统。

weixin_28285943的博客 308

数据结构与算法:12种排序全代码

排序 文章目录排序1.冒泡排序思路:优化:交换过程:C语言代码:优化后:2.直接插入排序思路:过程:代码:3.折半插入排序折半查找代码4.希尔插入排序思路:排序过程:代码5.选择排序思路:排序过程:代码6.鸡尾酒排序法思路:代码7.堆排序思路:代码8.归并排序思路:代码9.快速排序思路:代码10.计数排序思想:代码11.桶排序思路:代码12.基数排序思路过程:代码代码 各种排序算法的时间复杂度和空...

qq_42667970的博客 3024

OpenClaw 完整命令文档(2026.3.13 最新版)

本文档为OpenClaw 2026.3.13通用版使用指南,包含核心命令大全。主要内容包括:1)基础安装/升级/卸载命令;2)ClawHub扩展安装命令(支持飞书/钉钉/企微等平台连接);3)Skills技能安装命令(实现聊天/搜索/记忆等功能);4)飞书机器人授权与配对命令;5)启动运行与配置检查命令;6)工作区与记忆管理命令;7)插件安全设置命令;8)调试日志命令;9)飞书机器人一键部署简化流程。文档特别强调飞书机器人部署需feishu扩展+对应技能+用户授权的完整配置,所有命令均需在终端执行,安装后需

MKliudan的专栏 1293

基于OpenCV实现暗通道先验去雾算法及改进,效果惊人

深度技术文,前方高能

公号:一条coding 2万+

数据结构学习【各种排序算法代码实现】

数据结构学习【各种排序算法代码实现】

toro180的博客 1423

【肌电处理】肌电信号EMG积分肌电值+均方根值+中值频率+平均功率频率【含Matlab源码 3386期】

肌电信号EMG积分肌电值+均方根值+中值频率+平均功率频率 完整的代码,方可运行;可提供运行操作视频!适合小白!

订阅付费专栏Matlab(奶茶价版),可赠送奶茶价版付费专栏指定代码1份; 823

数据结构—排序(常见的所有排序思路及代码实现)

数据常见的排序算法:冒泡排序,选择排序,插入排序,希尔排序,堆排序,快速排序,归并排序,计数排序,所有排序思路动图及代码实现

unlockjy的博客 1328

App 抓包难?Frida Hook 实战:绕过 SSL Pinning (证书绑定) 抓取某大厂 App 核心接口

当我们使用 Charles 抓包 HTTPS 时,本质上是实施了MITM(中间人攻击)。Charles 伪装成服务器,发给 App 一个自己的证书(伪造证书)。Charles 伪装成 App,拿着真正的证书去请求服务器。如果 App 只是简单校验“证书是否由受信任的 CA 签发”,那你把 Charles 的根证书安装到手机系统里,就能骗过它。但是,是 App 内置了服务器证书的Hash(指纹)。

BUG猿的博客 916

024、反激变换器的短路保护设计

本文详细探讨了反激变换器短路保护的设计要点与实践经验。作者通过实际案例分析了短路时反激拓扑的电流特性,指出初级峰值电流限制是最基础的保护手段,但需配合打嗝模式使用。文章重点剖析了打嗝模式设计的三个关键陷阱:频率设定、退出条件和软启动衔接。同时强调次级侧辅助保护、变压器参数优化、环路响应协调的重要性,并比较了自恢复与锁死方案的适用场景。最后提出实测验证的四个关键点和设计经验:不盲信芯片手册、保护电路独立设计、充分留有余量、进行破坏性测试。全文以工程实践为导向,为反激电源的可靠短路保护提供了系统性解决方案。

Jack010169的博客 242

【数据结构】排序算法总结及代码实现

我们通常说的排序算法指的是内部排序算法,即数据在内存中进行排序。 首先先来看一下我们学过的排序都有什么? 排序可以大的方面分为比较排序和非比较排序? 比较排序有: 1、冒泡排序 2、选择排序 3、插入排序 (1)二分插入排序 (2)希尔排序 4、归并排序 5、堆排序 6、快速排序 非比较排序有: 1、计数排序 2、基数排序 3、桶排序 我们先对各种排序进行对比: ...

如风逝去 1万+

华为s110、s220、s310、s530、s620 配置ssh,配置web登录

在服务器端创建SSH用户。

送个祝福给小豪的博客 317

数据结构笔记(二)—— 排序算法和查找算法(java代码实现)

数据结构——绪论 数据结构简介 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7vaPjMSg-1624172502134)(C:\Users\value\AppData\Roaming\Typora\typora-user-images\image-20210321175244346.png)] 数据、数据元素、数据项、数据对象 数据 是能被输入计算机且能被计算机处理的各种符号的集合 信息的载体 是对客观事物符号化的表示 能够被计算机识别、存储和加工 包括

qq_45473439的博客 212

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

常用的排序算法(选择,冒泡,插入)

选择排序:这种排序算法的思路很简单,就是从左往右遍历,每次找最小的数放到前面。这样保证前面的数始终小于或等于后面的数,到最后整个数组都是有序的。冒泡排序:这种排序算法的思路也很简单,也是从左往右遍历,每次比较相邻两个数的大小,将大的往右边放。这样就保证到最后,右边的数始终比左边的数大,整个数组都是有序的。插入排序:这种排序算法的思路是从左往右遍历,每次保证左边的小数组是有序的。即就是每次从右边取一个数过来,然后和左边的小数组比较,插入到一个合适的位置。

未来已来,AI时代,学AI编程,做AI量化,就来大鹏AI教育。 714

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

B站-王卓-数据结构课程-学习笔记

使用C++语言实现B站王卓老师的数据结构公开课课程代码 chapter 0 chapter 1 chapter 2 chapter 3 chapter 4 chapter 5 使用说明 线性表、链表 栈、队列 [串、数组和广义表] 树 [图] 我的思维导图笔记-欢迎查看 使用说明 eg.1: //ElemType是数据类型别名,常见的有: typedef int ElemType; eg.2: //王卓老师视频中常用的结构体定义方式 typedef struct{ Elem

garbage_man的博客 3198

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

【十大排序算法】

看完美团、字节、腾讯这三家的一二三面试问题,是不是感觉问的特别多,可能咱们真的又得开启面试造火箭、工作拧螺丝的模式去准备下一次的面试了。开篇有提及我可是足足背下了Java互联网工程师面试1000题,多少还是有点用的呢,换汤不换药,不管面试官怎么问你,抓住本质即可!能读到此处的都是真爱Java互联网工程师面试1000题。

2401_83916394的博客 295

排序算法的动态演示

说明: 这一段在复习数据结构和算法,有一些零星笔记,在Others这个归类下,欢迎指正。 对于排序算法,想做一个动态演示的东东,因此今天使用VB.net大概实现了一个,界面如下,代码有2个版本,一个可以指示当前循环的位置(但设计感觉不好,也找不到更好的办法),一个没有。 代码:SortTest.rar...

weixin_34307464的博客 189

C++实现排序算法之选择排序

到了这个不得不联系算法的时候了背水一战也就这样吧,最近写了一些排序算法,发出来给大家看看。我是结合胡凡的算法笔记写的,我还没有写到难的排序算法,所以到现在就觉得还不难的。废话不多说。首先说一下选择算法,直接上图。然后我是没有看伪代码,直接写的代码。Po出来给大家看看啦。#include&lt;iostream&gt; using namespace std; int findmin(int a[]...

moliaochunfeng的博客 952

用Python实现的三种排序算法

都是一些简单的排序算法,用pytho实现主要是想记录自己的学习过程,不多说了,贴代码 冒泡排序: def bubbleSort(s): print s,"\n" c = 1; for i in range(len(s) - 1): for j in range(len(s) - i - 1): if s[j] > s[j

647

数据结构与算法——分析学习笔记

现在工作也已经快两年了,感觉到对基础的知识需求越来越大,这次要下定决心,把数据结构与算法学一遍,所有的代码都要打一遍,并把自己的学习体验写在博客上。   在网上看到也有人把学习数据结构与算法的笔记记录下来了:http://www.luocong.com/dsaanotes/index-Z-H-1.htm...

探索,分享,创新——追求卓越 199

数据结构与算法必备的 50 个代码实现。

数据结构和算法是程序员的内功心法和基本功。无论是人工智能还是其它计算机科学领域,掌握扎实的数据结构和算法知识,往往会助力不少!今天给大家推荐一份不错的数据结构与算法资源。特点是:全代码实现!这份资源的作者王争老师是前 Google 工程师,5 万+人跟着学的《数据结构和算法之美》专栏作者。他总结了程序员必备的 50 个数据结构与算法,以及相应的代码实现。开源地址为:https...

weixin_33859504的博客 5805

十大经典排序算法【算法思想+图解+代码】【数据结构与算法笔记】

排序算法还不懂?十大经典排序算法详解。【算法思想+图解+代码】冒泡排序,插入排序,选择排序,快速排序……看完你绝对能手撕各种排序算法。

魚肉的博客 1万+

[数据结构与算法] 排序算法

终于学习到了算法部分, 在学习算法时, 我们还是应该回顾一下数据结构与算法之间的关系 数据结构是研究数据的组织方式, 是算法的基础 算法是解决编程问题的方法论, 是程序的灵魂 程序= 数据结构+算法 排序算法 排序也称排序算法(Sort algorithm). 是指 将一组数据按照指定顺序进行排列的过程 主要分为内部排序和外部排序 内部排序: 指将需要处理的数据加载到内存中进行排序 外部排序...

时间静止 6856

排序算法(一)之冒泡排序(Python代码实现)

目录 一:排序算法介绍及算法的稳定性概念 (一):排序算法的定义 (二):排序算法的稳定性 二:冒泡排序算法 (一):冒泡排序算法概念 (二):冒泡排序的分析 (三):冒泡排序Python实现 (四):算法时间复杂度分析 (五):冒泡排序的动态图演示 数据结构和算法分析的文章: 算法与数据结构(一):算法效率的衡量 算法与数据结构(二):线性表(包括代码实现) 算法与数据...

qq_39820671的博客 1万+

【数据结构与算法】Java实现七大排序算法汇总

凿壁偷光,8000字总结Java实现七大排序算法!

冲击大厂之路!!! 2617
上一篇: 数据结构与算法笔记 —— 绪论
下一篇: 数据结构与算法笔记 —— 向量
HorizontalView
博客等级 码龄11年 9粉丝 29原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值