当前位置: 首页 > news >正文

十大排序算法(C语言)

参考文献

https://zhuanlan.zhihu.com/p/449501682
https://blog.csdn.net/mwj327720862/article/details/80498455?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522169837129516800222848165%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&request_id=169837129516800222848165&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2alltop_positive~default-2-80498455-null-null.142v96pc_search_result_base5&utm_term=%E5%8D%81%E5%A4%A7%E6%8E%92%E5%BA%8F%E7%AE%97%E6%B3%95c%E8%AF%AD%E8%A8%80&spm=1018.2226.3001.4187

算法概述

  • 算法分类

    • 比较类排序:通过比较来决定元素间的相对次序,由于其时间复杂度不能突破O(nlogn),因此也称为非线性时间比较类排序。
    • 非比较类排序:不通过比较来决定元素间的相对次序,它可以突破基于比较排序的时间下界,以线性时间运行,因此也称为线性时间非比较类排序。
      在这里插入图片描述
  • 算法复杂度
    在这里插入图片描述

  • 相关概念

    • 稳定:如果a原本在b前面,而a=b,排序之后a仍然在b的前面。
    • 不稳定:如果a原本在b的前面,而a=b,排序之后 a 可能会出现在 b 的后面。
    • 时间复杂度:对排序数据的总的操作次数。反映当n变化时,操作次数呈现什么规律。
    • 空间复杂度:是指算法在计算机 内执行时所需存储空间的度量,它也是数据规模n的函数。

冒泡排序算法(Bubble Sort)

  • 算法原理
    重复地走访过要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来,直到没有剩余需要交换的元素。
  • 动画演示
    在这里插入图片描述
  • 代码实现
    void bubbleSort(int *arr, int size) {/*只需要确定size - 1个最大数,最后一个自然就出来了*/for (int i = 0; i < size - 1; i++) {for (int j = 0; j < size - i - 1; j++) {if (arr[j] > arr[j + 1]) {int temp = arr[j];arr[j] = arr[j + 1];arr[j + 1] = temp;}}}
    }
    

选择排序(Selection Sort)

  • 算法原理
    首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。

  • 动画演示
    在这里插入图片描述

  • 代码实现

    void selectionSort(int *arr, int size) {/*同样地,确定好了size-1个最小值,最后一个就是最大值*/for (int i = 0; i < size - 1; i++) {int minIndex = i;for (int j = i + 1; j < size; j++) {if (arr[j] < arr[minIndex]) {minIndex = j;}}int temp = arr[minIndex];arr[minIndex] = arr[i];arr[i] = temp;}
    }
    

插入排序(Insertion Sort)

  • 算法原理
    构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。

  • 动画演示
    在这里插入图片描述

  • 代码实现

    void insertionSort(int *arr, int size) {/*选择插入的元素应当从第二个元素开始*/for (int i = 1; i < size; i++) {for (int j = i; j > 0; j--) {/*每次将该元素与前一个元素进行比较,符合条件就移动,否则直接结束循环*/if (arr[j] < arr[j - 1]) {int temp = arr[j];arr[j] = arr[j - 1];arr[j - 1] = temp;} else {break;}}}
    }
    
http://www.lryc.cn/news/211947.html

相关文章:

  • iTransformer: INVERTED TRANSFORMERS ARE EFFECTIVE FOR TIME SERIES FORECASTING
  • QT C++ AES字符串加密实现
  • 关于mysql json字段创建索引
  • “探索Linux世界:从CentOS安装到常见命令使用“
  • SVN出现Cleanup failed to process the following paths...
  • gitee上传项目
  • 实现文件上传和下载
  • 大数据-Storm流式框架(七)---Storm事务
  • Kafka - 3.x Kafka消费者不完全指北
  • Gerrit | 重磅! 2.x 版本升级到 3.x 版本----转
  • 使用c++编程语言,用递归的方法求第n个斐波那契数,代码如下
  • git config pull.rebase false
  • Spring面试题:(一)IoC,DI,AOP和BeanFactory,ApplicationContext
  • RabbitMQ如何保证消息不丢失呢?
  • VR步进式漫游,轻松构建三维模型,带来展示新形式!
  • 英语——分享篇——常用人物身份
  • 202310-宏基组学物种分析工具-MetaPhlAn4安装和使用方法-Anaconda3- centos9 stream
  • systrace/perfetto如何看surfaceflinger的vsync信号方法-android framework实战车载手机系统开发
  • 一文带你彻底弄懂js事件循环(Event Loop)
  • 数据结构与算法:二叉树之“堆排序”
  • gma 2 教程(三)坐标参考系统:2.基准面/椭球体
  • 【1day】复现广联达-Linkworks 协同办公管理平台信息泄露漏洞
  • Spring Cloud之ElasticSearch的学习【详细】
  • vscode免密码认证ssh连接virtual box虚拟机
  • 【Linux】Centos yum源替换
  • uniapp组件初始化的销毁(监听隐藏事件)
  • leetcode:1207. 独一无二的出现次数(python3解法)
  • 2023秋《论文写作》课程总结
  • Linux学习第27天:Platform设备驱动开发: 专注与分散
  • 最长公共子序列