经典排序算法之--冒泡排序
int[] a={5,7,3,2,4,9,6};
对于上面的一个数组,冒泡排序的原理是:
依次比较相邻元素的大小,前一个元素若比后一个元素大,则交换两个元素的位置,给人的感觉是大的元素像气泡一样往上冒,也可以把小的元素往上冒。
比较过程如下(最大值向上冒):
数组初始状态:{5,7,3,2,4,9,6}
第一次比较后:{5,7,3,2,4,9,6},5不比7大不交换位置
第二次比较后:{5,3,7,2,4,9,6},7和3比较,交换位置
第三次比较后:{5,3,2,7,4,9,6},7和2比较,交换位置
第四次比较后:{5,3,2,4,7,9,6},7和4比较,交换位置
第五次比较后:{5,3,2,4,7,9,6},7和9比较,位置不动
第六次比较后:{5,3,2,4,7,6,9},9和6比较,交换位置
第一轮排序过后,最大值9被排在了最后的位置,下次排序的时候只需要排{5,3,2,4,7,6}这个数组即可。核心代码如下:
for (int i=0;i<a.length;i++){//①循环次数for (int j=0;j<a.length-1-i;j++){//②比较次数if (a[j]>a[j+1]){int temp=a[j];a[j]=a[j+1];a[j+1]=temp;}}}
这里有几个难点需要说明一下:
1.外层循环的次数--i的边界怎么确定?
本例中的数组长度较小,可以手动推演一下即可得出,但是如果数组的长度很长,该如何得出?答案就在问题中,既然长度很长,那么我们缩小这个长度,以一个包含三个元素的数组作为参照得出这个外层循环的边界值。例如:
int[] a = {5,3,7}
数组的长度是3,我们只需要进行2轮循环就可以得出,那么这个i边界值的规律就是:i<a.length或a<=a.length-1,这其实是一种"降维思维",高维度的问题降个维度去思考会把问题简单化。传音手机在非洲市场的成功不就是典型吗?
2.内层比较次数怎么确定?
这个和上一个问题是一样的思路,做一下简单的推理即可得出,这里不做详述。
经典排序算法之--冒泡排序相关推荐
- python遍历数组冒泡排序_经典排序算法(冒泡排序,选择排序,插入排序,快速排序,堆排序)python实现...
最近在复习经典排序算法,自己用python也实现了一下,这里不会涉及到原理(因为网上方法已经很详细啦),就把函数贴上来,可以让大家自己试着运行下,再结合别处的原理也可以更好地理解它们的实现. 如果有错 ...
- 【完整可运行源码+GIF动画演示】十大经典排序算法系列——冒泡排序、选择排序、插入排序、希尔排序、归并排序、快速排序、堆排序、计数排序、桶排序、基数排序
以前也零零碎碎发过一些排序算法,但总是不系统, 这次彻底的对排序系列做了一个整体的规划, 小伙伴们快快mark哦~ [GIF动画+完整可运行源代码]C++实现 冒泡排序--十大经典排序算法之一 [GI ...
- 排序 时间倒序_经典排序算法之冒泡排序(Bubble Sort)
冒泡排序 ( Bubble Sort ) 冒泡排序,正如它的名字一样,未排序数组中的最大(小)值会依次往上浮.冒泡排序主要有两个基本步骤:相邻元素之间的比较 和 交换位置. 步骤分析: 令待排序序列为 ...
- 十大经典排序算法之冒泡排序及其优化
一.冒泡排序 1.冒泡排序算法的原理如下: 1.比较相邻的元素.如果第一个比第二个大,就交换他们两个. 2.对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对.在这一点,最后的元素应该会是最大 ...
- java冒泡排序经典代码6_经典排序算法之冒泡排序
一,算法原理 冒泡排序是交换排序的一种,原理是通过比较相邻两个元素的大小,如果发现顺序不对,就交换这两个元素的位置.当第一次循环结束时,最大的元素就被筛选出来,然后进入第二次循环,以此类推,直到没有任 ...
- 十大经典排序算法之冒泡排序【一】
[冒泡排序](Bubble Sort) a) 原理 冒泡排序是最简单的排序算法.它依次比较相邻的两个元素,如果它们的顺序错误就把它们交换过来,它重复的查询所要排序的数列.查询数列的工作直到 ...
- 经典排序算法之冒泡排序(含Java代码)
冒泡排序: 冒泡排序是一种简单的排序算法.它重复地走访过要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来.走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成. ...
- 重温经典排序算法之冒泡排序——图解+C/C++实现
目录 1.冒泡排序算法原理: 2.算法性能分析: (1)时间复杂度 (2)算法稳定性 3.图解分析 4.C/C++实现 1.冒泡排序算法原理: [说明]这里实现的冒泡排序算法均为从小到大排序 1.比较 ...
- java冒泡排序_JAVA实现经典排序算法(冒泡排序、选择排序、插入排序、希尔排序、堆排序、归并排序、快速排序)...
冒泡排序 依次比较相邻的元素,若发现逆顺序,则交换.小的向前换,大的向后换,本次循环完毕之后再次从头开始扫描,直到某次扫描中没有元素交换,说明每个元素都不比它后面的元素大,至此排序完成. import ...
最新文章
- 11月Android笔记
- php 检测密码,php检测密码强度
- Linux:入门基础
- POJ1523:SPF(无向连通图求割点)
- 第三次学JAVA再学不好就吃翔(part15)--基础语法之控制跳转语句
- nginx 下配置使用Thinkphp5解决跨目录活动并且设置网站根目录
- recovery.conf 用于 stream replication
- 容器、Docker与Kubernetes——Kubernetes的配置入门
- shell 判断执行结果 是否要推出
- .NET图像处理包 DotImage
- cpu功耗排行_AMD、Intel主流处理器性能、功耗及性价比排行(更新中)
- python pip 安装第三方库 mysql模块步骤--pip install mysql-connector-python
- Nginx框架之Lua拓展
- Debian修改DNS
- 从谷歌搜获更多~[一些谷歌搜索的提示和技巧]
- np.piecewise函数用法
- 【云原生 | 从零开始学Kubernetes】二十三、Kubernetes控制器Statefulset
- Zhong__k8s基础尝试和配置flannel
- 斯福尼健康采暖,终结健康杀手——雾霾
- uniApp使用GoogleMap规划多个目的地路线