文章目录

  • 冒泡排序
    • 1. 图解冒泡排序
    • 2. C语言实现
      • 针对数组本身有序

冒泡排序

遍历数组,从前往后进行比较,每次都将最大的数字交换至最后,并减少比较长度。

  • 从小到大进行排序
  • 时间复杂度O( n2 )
  • 空间复杂度O( 1 ),稳定

1. 图解冒泡排序

  • 1、遍历数组, arr[i] 从第1个数字到倒数第二个数字len-1。
  • 2、首先定义第三方变量 tmp 用于数字的交换。
  • 3、每次都从第1数字(下标0)开始一直到已完成排序的数字之前的位置即下标len-1-i,将 j 下标的值(即 arr[ j ])和它后面的数字的值(即 arr[ j+1 ])进行比较。
  • 4、如果下标的值 arr[j+1] 大于 arr[j] ,使用第三方变量tmp将该数字 arr[j]和arr[j+1]的值进行交换。
  • 5、每一轮交换完成后,重新进行上述操作,直至完成排序。

2. C语言实现

void BubbleSort(int* arr, int len)//冒泡排序,时间复杂度O(n^2),空间复杂度O(1)
{int tmp;for (int i = 0; i < len-1; i++)//从第一个数字开始排序,将最大的数字放在最后面{//for (int j = 0; j + 1 < len - i; j++)for (int j = 0; j < len - 1 - i; j++)//从第一个数字开始至已完成排序的数字之前的所有数字j与j+1进行比较,将较大的数字置于后面{if (arr[j] >= arr[j+1]){tmp = arr[j];arr[j] = arr[j + 1];arr[j + 1] = tmp;}}}
}

针对数组本身有序

  • 如果数组本身有序,可定义一个标记,判断是否发生交换,没有发生交换则直接退出。
void BubbleSort1(int* arr, int len)//冒泡排序,针对数组本身有序
{int tmp;bool flg;//记录是否发生交换for (int i = 0; i < len - 1; i++){flg = false;//每次循环都将flg置为falsefor (int j = 0; j < len - i - 1; j++){if (arr[j] >= arr[j + 1]){tmp = arr[j];arr[j] = arr[j + 1];arr[j + 1] = tmp;flg = true;}}if (!flg)//如果没有发生交换,直接退出{return;}}
}

排序算法——冒泡排序(图解+代码)相关推荐

  1. python排序算法 ——冒泡排序(附代码)

    python排序算法 --冒泡排序 文章目录 python排序算法 --冒泡排序 一.前言 二.算法描述 三.代码实现 总结 一.前言 相关知识来自<python算法设计与分析>.初级排序 ...

  2. 【排序算法】图解简单选择排序(图解堪比Debug显示每次循环结果)

    [排序算法]图解简单选择排序(图解堪比Debug分析每次循环结果) 写在前面: 本文主要介绍简单选择排序算法,通过图片一步步解释每一趟每一次的后移.代码通过C#实现,并输出每一次交换的情况和比较次数, ...

  3. 排序算法10——图解基数排序(次位优先法LSD和主位优先法MSD)

    排序算法1--图解冒泡排序及其实现(三种方法,基于模板及函数指针) 排序算法2--图解简单选择排序及其实现 排序算法3--图解直接插入排序以及折半(二分)插入排序及其实现 排序算法4--图解希尔排序及 ...

  4. C语言基础排序算法-冒泡排序

    C语言基础排序算法-冒泡排序 什么是冒泡排序? 顾名思义,这种排序方法就像水中的气泡一样,从底逐渐往上冒,一次前进一步.我们来看一个例子,看看到底是怎么冒泡的.假设有一个数组3,2,5,4,1,我们希 ...

  5. 经典排序算法 - 冒泡排序Bubble sort

    经典排序算法 - 冒泡排序Bubble sort 其原理是比较接近的数字22,按照从小到交换大或降序排列, 这样一趟过去后,最大或最小的数字被交换到了最后一位, 然后再从头開始进行两两比較交换,直到倒 ...

  6. python 代码排布_python实现经典排序算法的示例代码

    以下排序算法最终结果都默认为升序排列,实现简单,没有考虑特殊情况,实现仅表达了算法的基本思想. 冒泡排序 内层循环中相邻的元素被依次比较,内层循环第一次结束后会将最大的元素移到序列最右边,第二次结束后 ...

  7. 【排序算法】图解直接插入排序(图解堪比Debug显示每次循环结果)

    [排序算法]图解直接插入排序(图解堪比Debug分析每次循环结果) 写在前面: 本文主要介绍直接插入排序算法,通过图片一步步解释每一趟每一次的后移.代码通过C#实现,并输出每一次交换的情况和比较次数, ...

  8. 十大经典排序算法-冒泡排序算法详解

    十大经典排序算法 十大经典排序算法-冒泡排序算法详解 十大经典排序算法-选择排序算法详解 十大经典排序算法-插入排序算法详解 十大经典排序算法-希尔排序算法详解 十大经典排序算法-快速排序算法详解 十 ...

  9. 排序算法——冒泡排序(Bubble Sort)

    排序算法--冒泡排序(Bubble Sort) 算法简介(Introduction) Bubble sort is to compare adjacent elements of the list a ...

  10. 十大经典排序算法(图解与代码)——冒泡排序、选择排序、插入排序、希尔排序、归并排序、快速排序、堆排序、计数排序、桶排序、基数排序(Python and Java)

    排序 重新排列表中的元素,使表中的元素按照关键字递增或者递减 内部排序: 指在排序期间,元素全部存放在内存中的排序 外部排序: 指在排序期间元素无法全部同时存放在内存中,必须在排序的过程中根据要求不断 ...

最新文章

  1. vba mysql odbc_使用VBA+ODBC+MySQL实现Excel网络版
  2. 20220209-CTF MISC-BUUCTF-难易程度:简单
  3. java bean 工厂模式_深入理解Java的三种工厂模式
  4. oracle adf_Oracle ADF移动世界! 你好!
  5. electron 主进程与渲染进程 渲染进程与渲染进程 之间的通信
  6. win7系统稳定测试软件,win7系统电脑测试cpu性能的方法(图文)
  7. 软件测试 -------- 数据库设计 的 E-R 模型
  8. java检测用户是否重复登录_Java web工程判断用户是否重复登录
  9. binlog数据库不写入binlog_MySQL数据库及InnoDB存储引擎的日志文件
  10. BZOJ 3240 构造矩阵+矩阵快速幂
  11. 1223. Chernobyl’ Eagle on a Roof(dp)poj3783
  12. 美智库:马赛克战是人工智能与自主系统支撑的决策中心战
  13. 关于u盘文件或目录损坏且无法读取的解决方法
  14. 轻松安装IP地址位置查询工具nali
  15. Person Re-identification using Heterogeneous Local Graph Attention Networks(基于异构局部图注意力网络的人员再识别)
  16. 科研突破:非宁静无以致远
  17. MATLAB之易经卜卦程序+GUI
  18. (转)16天记住英语7000个单词,300个句子
  19. 使用js调用设备摄像头并实现拍照
  20. buntu18.04无线网卡无法识别问题

热门文章

  1. 2020移动apn接入点哪个快_为什么别人的4g网总比你快?手机这个设置没开启,难怪网络...
  2. 从乔布斯卸任看苹果未来三年 会否半途而废?
  3. re.search与re.findall的区别
  4. 华为EMUI10基本可以升鸿蒙,华为EMUI11发布,12月可升级为鸿蒙OS国产操作系统
  5. .考试倒计时43天!来提分啦!
  6. linux 5g,5G的时隙配置
  7. git常用命令之git push使用说明
  8. Python 读取xlsx表格
  9. “二选一”突袭,暗战“山姆”?
  10. 关于spring-mybatis整合出现的问题Error creating bean with name ‘sqlSessionFactory‘ defined in class path reso