拒绝水文!八大排序(二)【适合初学者】冒泡排序和选择排序

简介: 拒绝水文!八大排序(二)【适合初学者】冒泡排序和选择排序



大家好,我是纪宁。

这篇文章介绍八大排序中思路最简单,但效率也是最低的两种排序算法!

冒泡排序

冒泡排序,可以说是每个人在接触编程时最先学会的一种排序。

冒泡排序基本思想

冒泡排序(Bubble Sort)也是一种简单直观的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢"浮"到数列的顶端,但是在广泛适用后,冒泡排序可以用来排任意顺序。

动态图解

冒泡排序示例

假设要将已知无需数列按从小到大排列,将第一个元素与后面的元素依次比较,如果必后面的元素小,就与后面某个元素交换位置,然后用这个元素再依次往后比较,遇到比这个元素小的就与这个元素交换,直到最后一个元素,就完成了一趟冒泡排序,则最后一个元素一定是这个序列里最大的一个元素;然后开始第二趟冒泡排序,继续从第一个元素开始往后一次比较,遇到较小的就交换位置,直到倒数第二个数,那么最后倒数第二个数就变成了第二大的数…依次排完序列中所有的数,那么这个数的顺序就会变成从小到大,下面我用图来演示 :

一趟冒泡后,11就到了它该在的位置。

因为每次冒泡比较的次数都会递减,所以写代码的时候就要控制一下。

void BubbleSort(int* a, int n)//冒泡排序
{
  for (int i = 0; i < n; i++)
  {
    int flag = 0;//如果一趟后ret还等于0,说明数据已经有序
    for (int j = 0; j < n - i - 1; j++)
    {
      if (a[j] > a[j + 1])
      {
        Swap(&a[j], &a[j + 1]);
        flag = 1;
      }
    }
    if (flag == 0)
      break;
  }
}

因为冒泡排序在时间复杂度上确实不太占优,所以我们一般可以加一个 falg 用来判断即将进行调整的那部分序列是否已经有序,如果已有序,那就不用再进行‘冒泡’了,直接退出循环。

时间复杂度:O(N^2)

空间复杂度:O(1)

稳定性:稳定

选择排序

选择排序基本思想

每次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。

动态图解

每次‘选择’一个较大或者较小的数,放在指定位置。

这个思路非常简单,那就直接上代码了。

void SelectSort(int* a, int n)
{
  for (int j = 0; j < n; j++)
  {
    int mini = j;
    int maxi= n - j-1;
    for (int i = j; i < n-j; i++)
    {
      if (a[i] < a[mini])
      {
        mini = i;
      }
      if (a[i] > a[maxi])
      {
        maxi = i;
      }
    }
    Swap(&a[mini], &a[j]);
    if (maxi == j)
    {
      maxi = mini;//最大值如果在 j 这个位置的话,结果这个位置被换成了min 的值
    }
    Swap(&a[maxi], &a[n-1-j]);
  }
}

每次将最大值和最小值的下标找出来,与相应位置的数进行交换,但如果每次要直接找一个剩余序列的最大值和最小值的话,就需要判断最大值的下标对否恰好和最小值需要交换位置的下标重合,防止大的数据被‘调包’。

相关文章
|
SQL 数据采集 分布式计算
Dataphin测评:企业级数据中台的「智能中枢」与「治理引擎」
Dataphin是一款智能数据建设与治理平台,基于阿里巴巴OneData方法论,提供从数据采集、建模研发到资产治理、数据服务的全链路智能化能力。它帮助企业解决数据口径混乱、质量参差等问题,构建标准化、资产化、服务化的数据中台体系。本文通过详细的操作步骤,介绍了如何使用Dataphin进行离线数仓搭建,包括规划数仓、数据集成、数据处理、运维补数据及验证数据等环节。尽管平台功能强大,但在部署文档更新、新手友好度及基础功能完善性方面仍有提升空间。未来可引入SQL智能纠错、自然语言生成报告等功能,进一步增强用户体验与数据治理效率。
1158 34
Dataphin测评:企业级数据中台的「智能中枢」与「治理引擎」
|
6天前
|
缓存 人工智能 自然语言处理
我对比了8个Claude API中转站,踩了不少坑,总结给你
本文是个人开发者耗时1周实测的8大Claude中转平台横向评测,聚焦Claude Code真实体验:以加权均价(¥/M token)、内部汇率、缓存支持、模型真实性及稳定性为核心指标。
2633 18
|
18天前
|
人工智能 自然语言处理 安全
Claude Code 全攻略:命令大全 + 实战工作流(建议收藏)
本文介绍了Claude Code终端AI助手的使用指南,主要内容包括:1)常用命令如版本查看、项目启动和更新;2)三种工作模式切换及界面说明;3)核心功能指令速查表,包含初始化、压缩对话、清除历史等操作;4)详细解析了/init、/help、/clear、/compact、/memory等关键命令的使用场景和语法。文章通过丰富的界面截图和场景示例,帮助开发者快速掌握如何通过命令行和交互界面高效使用Claude Code进行项目开发,特别强调了CLAUDE.md文件作为项目知识库的核心作用。
16130 48
Claude Code 全攻略:命令大全 + 实战工作流(建议收藏)
|
14天前
|
人工智能 JavaScript Ubuntu
低成本搭建AIP自动化写作系统:Hermes保姆级使用教程,长文和逐步实操贴图
我带着怀疑的态度,深度使用了几天,聚焦微信公众号AIP自动化写作场景,写出来的几篇文章,几乎没有什么修改,至少合乎我本人的意愿,而且排版风格,也越来越完善,同样是起码过得了我自己这一关。 这个其实OpenClaw早可以实现了,但是目前我觉得最大的区别是,Hermes会自主总结提炼,并更新你的写作技能。 相信就冲这一点,就值得一试。 这篇帖子主要就Hermes部署使用,作一个非常详细的介绍,几乎一步一贴图。 关于Hermes,无论你赞成哪种声音,我希望都是你自己动手行动过,发自内心的选择!
3076 29
|
3天前
|
云安全 人工智能 安全
|
3天前
|
人工智能 测试技术 API
阿里Qwen3.6-27B正式开源:网友直呼“太牛了”!
阿里云千问3.6系列重磅开源Qwen3.6-27B稠密大模型!官网:https://t.aliyun.com/U/JbblVp 仅270亿参数,编程能力媲美千亿模型,在SWE-bench等权威基准中表现卓越。支持多模态理解、本地部署及OpenClaw等智能体集成,已开放Hugging Face与ModelScope下载。
|
2天前
|
机器学习/深度学习 缓存 测试技术
DeepSeek-V4开源:百万上下文,Agent能力比肩顶级闭源模型
DeepSeek-V4正式开源!含V4-Pro(1.6T参数)与V4-Flash(284B参数)双版本,均支持百万token上下文。首创混合注意力架构,Agent能力、世界知识与推理性能全面领先开源模型,数学/代码评测比肩顶级闭源模型。
1394 6