相信大家看了上篇博客了解了我们简化版的桶排序有一定的局限性,对于数字大的占用空间严重并且无法处理小数,所以这节课给大家讲比桶排序的实用性高一点的冒泡排序。

首先冒泡排序的核心思想就是比较相邻的两个元素,顺序错误那就换位置。(顺序指的是从大到小或者从小到大)

就比如说我们要将12,35,99,18,76这五个数要按照从大到小的顺序进行排序。就意味着小的靠后,最小的放最后面。乍一听是一句废话,其实很关键。

首先我们要比较的是第1位和第2位也就是12和35这两个数字,小的靠后,所以12和35应该交换位置,交换后顺序变成了35,12,99,18,76。

然后比较第2位和第3位也就是12和99这两个数字,因为12<99所以应该交换位置,交换后顺序变成了35,99,12,18,76。

同理比较第3位和第4位也就是12和18这两个数字,因为12<18所以应该交换位置,交换后顺序变成了35,99,18,12,76。

最后比较第4位和第5位也就是12和76这两个数字,因为12<99所以应该交换位置,交换后顺序变成了35,99,18,76,12。

经过这4次比较我们发现12这个数字已经归位(归位就是说现在12的位置就是最终排序的结果中12的位置),所以我们接下来要做的就是从头把剩余数字全部归位也就可以了。

关于排序次数我们知道5个数字排序我们只需要把4个数字归位就可以了,剩下一个肯定归位。所以n个数字排序我们需要n-1次。

像不像泡泡慢慢的向上飘,也可能这就是称为冒泡算法的原因吧

然后给大家书写一下代码讨论一下冒泡算法

#include<stdio.h>
int main()
{int i,n,j,t;printf("请输入数组大小\n");scanf("%d",&n);int *arr=new int [n]();printf("输入数字\n");for(i=0;i<n;i++)//像数组中填充数据{scanf("%d",&arr[i]);}for(i=0;i<n-1;i++)//n个数据只需要n-1次,剩下的那个肯定是归位的{for(j=0;j<n-1-i;j++)//本来需要n-次,但是已经归位的数字我们不需要再考虑,所以再是n-1-i{if(arr[j]>arr[j+1])//交换位置{t=arr[j+1];arr[j+1]=arr[j];arr[j]=t;}}}for(int i=0;i<n;i++){printf("%d ",arr[i]);}delete[] arr;
}

我们不难看出冒泡排序的是双重嵌套,所以时间复杂度为O(N^2),时间复杂度是非常高的,虽然比简易版的桶排序有更广泛的使用范围,但因为时间复杂度的关系也不怎么被广泛使用。如果想知道有没有更好的排序算法,请看下一章——快速排序

邻居交换——冒泡排序相关推荐

  1. 【一周一算法】算法2:邻居好说话——冒泡排序

    [啊哈!算法] 简化版的桶排序不仅仅有上一节所遗留的问题,更要命的是:它非常浪费空间!例如需要排序数的范围是0~2100000000之间,那你则需要申请2100000001个变量,也就是说要写成int ...

  2. 最多K次交换冒泡排序

    1. 题目描述 冒泡排序(bubble sort)通过在序列中不断比较和交换相邻的两个元素,最终把所有元素按升序排列.规定相邻元素的交换次数不超过K, 比较次数没有限制,求冒泡排序能生成的字典序最小序 ...

  3. 邻居好说话——冒泡排序

    冒泡排序的基本思想是:每次比较两个相邻的元素,如果它们的顺序错误就把它们交换过来. 代码如下: #include<stdio.h> int main(){int a[100],i,j,t, ...

  4. Vue造成内存泄露的一些问题

    在vue文件中的script标签里定义变量导致的内存泄露 如下,在vue文件定义了一个const变量,最终无法释放: // Text.vue <template></template ...

  5. 【坐在马桶上看算法】算法2:邻居好说话:冒泡排序

    简 化版的桶排序不仅仅有上一节所遗留的问题,更要命的是:它非常浪费空间!例如需要排序数的范围是0~2100000000之间,那你则需要申请 2100000001个变量,也就是说要写成int a[210 ...

  6. 邻居好说话:冒泡排序

    简化版的桶排序不仅仅有上一节所遗留的问题,更要命的是:它非常浪费空间!例如需要排序数的范围是0~2100000000之间,那你则需要申请2100000001个变量,也就是说要写成int a[21000 ...

  7. java算法之冒泡排序法

    冒泡排序法 口诀:外层循环 0到n-1 //控制比较轮数 n 表示元素的个数内层循环 0到n-i-1 //控制每一轮比较次数两两比较做交换   冒泡排序的优点:每进行一趟排序,就会少比较一次,因为每进 ...

  8. Java实现冒泡排序及其优化

    冒泡排序(Bubble Sort):从左至右(从下标较小的元素开始)依次比较相邻元素的值,若发现逆序则交换,使较大的元素逐渐从前移向后部. 冒泡排序的规则(以数组 arr= {3, 9, -1, 10 ...

  9. 冒泡排序 小白学demo_day2

    冒泡排序的过程: 重复地走访要排序的元素,依次比计较两个相邻的元素,如果他们的顺序错误就把他们交换过来.走访元素的工作室重复地进行直到没有相邻元素需要交换,也就是说该元素列已经排序完成. 简单说,就是 ...

最新文章

  1. 分享Kali Linux 2016.2第46周虚拟机
  2. 为什么不要使用finalize方法
  3. Stanford UFLDL教程 反向传播算法(BP算法)
  4. android8 呼吸灯,红米note8pro呼吸灯颜色如何设置?
  5. 初始化java工具失败,“初始化 Java 工具”期间发生了内部错误, java.lang.NullPointerException...
  6. 【转自小峰博客】协调器的启动【自动模式】
  7. prop()和attr()
  8. cuSPARSE库:(十五)已经弃用的函数(1)
  9. PHP Overview
  10. 百面机器学习—12.优化算法
  11. 芒格:如何面对投资中的巨大回撤?
  12. c语言课程设计学生成绩管理系统作业,C语言学生成绩管理系统课程设计word版
  13. 编辑chm格式的文档
  14. 后端自我介绍_java开发自我介绍3篇
  15. 破解Photoshop cs6
  16. 全局zomm缩放后echarts鼠标偏移的问题(鼠标触发提示框位置有偏差)
  17. 月薪50K的测试工程师,要求原来是这样!
  18. ffmpeg 之 RTSP 一
  19. (第二章)OpGL超级宝典学习:创建我们第一个OpenGL程序,绘制一个点和三角形
  20. Win7开启wifi热点

热门文章

  1. MT8735芯片技术资料集锦
  2. Android Gradle学习(一)
  3. 超好玩的js页面效果---实现数值的动态变化
  4. 广州APP开发多少钱一个呢,品向告诉你知道
  5. 导出Excel出现“异常来自 HRESULT:0x800A03EC”错误的解决方法
  6. Ubuntu18.04 mininet+pox+poxdesk配置
  7. 2020-11-16
  8. 用微信小程序开店之二——Hello 小程序
  9. 一个外企白领的自白,让我们惊慌不已:猪和母鸡合资
  10. Covid-19病例监测公用数据集