码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 十大排序算法(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;
                  }
              }
          }
      }
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12

    选择排序(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;
          }
      }
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14

    插入排序(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;
                  }
              }
          }
      }
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
  • 相关阅读:
    jQuery基础
    100天精通Golang(基础入门篇)——第19天:深入剖析Go语言中方法(Method)的妙用与实践
    Linux驱动开发中设备节点、虚拟节点、逻辑节点之间的区别与关系
    lightdb22.3特性预览-增强对oracle内置函数的兼容
    java基于微信小程序的灯具销售商城 uniapp小程序
    C++--位图和布隆过滤器
    Head First设计模式(阅读笔记)-08.外观模式
    [李宏毅] self attention 个人笔记
    远程电脑未连接显示器时分辨率太小的问题处理
    Web安全常见攻击
  • 原文地址:https://blog.csdn.net/qq_44629819/article/details/134071980
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号