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.内层比较次数怎么确定?

这个和上一个问题是一样的思路,做一下简单的推理即可得出,这里不做详述。

经典排序算法之--冒泡排序相关推荐

  1. python遍历数组冒泡排序_经典排序算法(冒泡排序,选择排序,插入排序,快速排序,堆排序)python实现...

    最近在复习经典排序算法,自己用python也实现了一下,这里不会涉及到原理(因为网上方法已经很详细啦),就把函数贴上来,可以让大家自己试着运行下,再结合别处的原理也可以更好地理解它们的实现. 如果有错 ...

  2. 【完整可运行源码+GIF动画演示】十大经典排序算法系列——冒泡排序、选择排序、插入排序、希尔排序、归并排序、快速排序、堆排序、计数排序、桶排序、基数排序

    以前也零零碎碎发过一些排序算法,但总是不系统, 这次彻底的对排序系列做了一个整体的规划, 小伙伴们快快mark哦~ [GIF动画+完整可运行源代码]C++实现 冒泡排序--十大经典排序算法之一 [GI ...

  3. 排序 时间倒序_经典排序算法之冒泡排序(Bubble Sort)

    冒泡排序 ( Bubble Sort ) 冒泡排序,正如它的名字一样,未排序数组中的最大(小)值会依次往上浮.冒泡排序主要有两个基本步骤:相邻元素之间的比较 和 交换位置. 步骤分析: 令待排序序列为 ...

  4. 十大经典排序算法之冒泡排序及其优化

    一.冒泡排序 1.冒泡排序算法的原理如下: 1.比较相邻的元素.如果第一个比第二个大,就交换他们两个. 2.对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对.在这一点,最后的元素应该会是最大 ...

  5. java冒泡排序经典代码6_经典排序算法之冒泡排序

    一,算法原理 冒泡排序是交换排序的一种,原理是通过比较相邻两个元素的大小,如果发现顺序不对,就交换这两个元素的位置.当第一次循环结束时,最大的元素就被筛选出来,然后进入第二次循环,以此类推,直到没有任 ...

  6. 十大经典排序算法之冒泡排序【一】

    [冒泡排序](Bubble Sort) a)       原理 冒泡排序是最简单的排序算法.它依次比较相邻的两个元素,如果它们的顺序错误就把它们交换过来,它重复的查询所要排序的数列.查询数列的工作直到 ...

  7. 经典排序算法之冒泡排序(含Java代码)

    冒泡排序: 冒泡排序是一种简单的排序算法.它重复地走访过要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来.走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成. ...

  8. 重温经典排序算法之冒泡排序——图解+C/C++实现

    目录 1.冒泡排序算法原理: 2.算法性能分析: (1)时间复杂度 (2)算法稳定性 3.图解分析 4.C/C++实现 1.冒泡排序算法原理: [说明]这里实现的冒泡排序算法均为从小到大排序 1.比较 ...

  9. java冒泡排序_JAVA实现经典排序算法(冒泡排序、选择排序、插入排序、希尔排序、堆排序、归并排序、快速排序)...

    冒泡排序 依次比较相邻的元素,若发现逆顺序,则交换.小的向前换,大的向后换,本次循环完毕之后再次从头开始扫描,直到某次扫描中没有元素交换,说明每个元素都不比它后面的元素大,至此排序完成. import ...

最新文章

  1. 11月Android笔记
  2. php 检测密码,php检测密码强度
  3. Linux:入门基础
  4. POJ1523:SPF(无向连通图求割点)
  5. 第三次学JAVA再学不好就吃翔(part15)--基础语法之控制跳转语句
  6. nginx 下配置使用Thinkphp5解决跨目录活动并且设置网站根目录
  7. recovery.conf 用于 stream replication
  8. 容器、Docker与Kubernetes——Kubernetes的配置入门
  9. shell 判断执行结果 是否要推出
  10. .NET图像处理包 DotImage
  11. cpu功耗排行_AMD、Intel主流处理器性能、功耗及性价比排行(更新中)
  12. python pip 安装第三方库 mysql模块步骤--pip install mysql-connector-python
  13. Nginx框架之Lua拓展
  14. Debian修改DNS
  15. 从谷歌搜获更多~[一些谷歌搜索的提示和技巧]
  16. np.piecewise函数用法
  17. 【云原生 | 从零开始学Kubernetes】二十三、Kubernetes控制器Statefulset
  18. Zhong__k8s基础尝试和配置flannel
  19. 斯福尼健康采暖,终结健康杀手——雾霾
  20. uniApp使用GoogleMap规划多个目的地路线

热门文章

  1. 实现安全登录的两种方法
  2. P2807 三角形计数(c++)
  3. PHP网页设计实现增删改查,包含报告实训内容
  4. html5 css图片倒影,CSS3----图片倒影效果
  5. excel文件类型自动判断
  6. Android Error while Launching activity
  7. 图像分割库segmentation_models.pytorch
  8. 【JDK源码】集合源码目录,冲冲冲
  9. 有赞招聘 | 遇见offer之就要圆你的大厂梦
  10. 【荔枝派zero】usb虚拟串口实现