邻居交换——冒泡排序
相信大家看了上篇博客了解了我们简化版的桶排序有一定的局限性,对于数字大的占用空间严重并且无法处理小数,所以这节课给大家讲比桶排序的实用性高一点的冒泡排序。
首先冒泡排序的核心思想就是比较相邻的两个元素,顺序错误那就换位置。(顺序指的是从大到小或者从小到大)
就比如说我们要将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),时间复杂度是非常高的,虽然比简易版的桶排序有更广泛的使用范围,但因为时间复杂度的关系也不怎么被广泛使用。如果想知道有没有更好的排序算法,请看下一章——快速排序
邻居交换——冒泡排序相关推荐
- 【一周一算法】算法2:邻居好说话——冒泡排序
[啊哈!算法] 简化版的桶排序不仅仅有上一节所遗留的问题,更要命的是:它非常浪费空间!例如需要排序数的范围是0~2100000000之间,那你则需要申请2100000001个变量,也就是说要写成int ...
- 最多K次交换冒泡排序
1. 题目描述 冒泡排序(bubble sort)通过在序列中不断比较和交换相邻的两个元素,最终把所有元素按升序排列.规定相邻元素的交换次数不超过K, 比较次数没有限制,求冒泡排序能生成的字典序最小序 ...
- 邻居好说话——冒泡排序
冒泡排序的基本思想是:每次比较两个相邻的元素,如果它们的顺序错误就把它们交换过来. 代码如下: #include<stdio.h> int main(){int a[100],i,j,t, ...
- Vue造成内存泄露的一些问题
在vue文件中的script标签里定义变量导致的内存泄露 如下,在vue文件定义了一个const变量,最终无法释放: // Text.vue <template></template ...
- 【坐在马桶上看算法】算法2:邻居好说话:冒泡排序
简 化版的桶排序不仅仅有上一节所遗留的问题,更要命的是:它非常浪费空间!例如需要排序数的范围是0~2100000000之间,那你则需要申请 2100000001个变量,也就是说要写成int a[210 ...
- 邻居好说话:冒泡排序
简化版的桶排序不仅仅有上一节所遗留的问题,更要命的是:它非常浪费空间!例如需要排序数的范围是0~2100000000之间,那你则需要申请2100000001个变量,也就是说要写成int a[21000 ...
- java算法之冒泡排序法
冒泡排序法 口诀:外层循环 0到n-1 //控制比较轮数 n 表示元素的个数内层循环 0到n-i-1 //控制每一轮比较次数两两比较做交换 冒泡排序的优点:每进行一趟排序,就会少比较一次,因为每进 ...
- Java实现冒泡排序及其优化
冒泡排序(Bubble Sort):从左至右(从下标较小的元素开始)依次比较相邻元素的值,若发现逆序则交换,使较大的元素逐渐从前移向后部. 冒泡排序的规则(以数组 arr= {3, 9, -1, 10 ...
- 冒泡排序 小白学demo_day2
冒泡排序的过程: 重复地走访要排序的元素,依次比计较两个相邻的元素,如果他们的顺序错误就把他们交换过来.走访元素的工作室重复地进行直到没有相邻元素需要交换,也就是说该元素列已经排序完成. 简单说,就是 ...
最新文章
- 分享Kali Linux 2016.2第46周虚拟机
- 为什么不要使用finalize方法
- Stanford UFLDL教程 反向传播算法(BP算法)
- android8 呼吸灯,红米note8pro呼吸灯颜色如何设置?
- 初始化java工具失败,“初始化 Java 工具”期间发生了内部错误, java.lang.NullPointerException...
- 【转自小峰博客】协调器的启动【自动模式】
- prop()和attr()
- cuSPARSE库:(十五)已经弃用的函数(1)
- PHP Overview
- 百面机器学习—12.优化算法
- 芒格:如何面对投资中的巨大回撤?
- c语言课程设计学生成绩管理系统作业,C语言学生成绩管理系统课程设计word版
- 编辑chm格式的文档
- 后端自我介绍_java开发自我介绍3篇
- 破解Photoshop cs6
- 全局zomm缩放后echarts鼠标偏移的问题(鼠标触发提示框位置有偏差)
- 月薪50K的测试工程师,要求原来是这样!
- ffmpeg 之 RTSP 一
- (第二章)OpGL超级宝典学习:创建我们第一个OpenGL程序,绘制一个点和三角形
- Win7开启wifi热点