网站首页
手机版

小学生都能学会的冒泡排序

更新时间:作者:小小条

01

小学生都能学会的冒泡排序

故事起源

幼儿园放学,小朋友们集合,需要先从低到高排队,应该怎么排呢?


02

开始行动

小K身高180,是班里最高的,自然得往后排啦。小K先和身后的小B比较,然后和小B交换。

小K接着和身后的小D比较,然后和小D交换。

经过和4个小朋友交换位置,小K终于找到自己的位置啦。

上面的过程其实就是冒泡排序的核心思想了。


03

冒泡排序

为描述方便,用下面的数组模拟小朋友的交换过程。

核心思想(升序):
从首位置开始,依次比较前后两个数,如果前面的数比后面的数大,就交换两个数。这样第1轮结束后,最大的数就会移动到最后的位置。对剩余元素重复执行N-1次,整个数组有序。因为像空气上浮到水面,最大的元素会慢慢浮到最后,所以冒泡因此得名。


3.1

第1轮

执行完成后,最大的元素归位。

3.2

第2轮

第2轮接着对前面剩余的N-1个元素重复上面步骤,第2大的元素归位。

3.3

第3轮

第3轮对前面剩余的N-2个元素重复上面步骤,第3大的元素归位。

总共执行N-1次操作,所有元素归位。


3.4

代码实现

for (int i = 0; i < n - 1; ++i) {    for (int j = 0; j < n - i - 1; ++j) {        if (a[j] > a[j + 1]) {            swap(a[j], a[j + 1]);        }    }}


04

问题及优化

4.1

迭代轮次优化

如果原数组为如下情况,那么在执行完第1轮后,整个数组已经有序,后面的轮次没必要执行,可以针对这种情况做一次优化改进。
改进点1:
如果某一轮没有发生过交换,说明数组已经有序,那么以后也不会发生交换,此时可以终止迭代。

代码实现

for (int i = 0; i < n - 1; ++i) {    // flag标记是否有交换    bool flag = true;    for (int j = 0; j < n - i - 1; ++j) {        if (a[j] > a[j + 1]) {            swap(a[j], a[j + 1]);            flag = false;        }    }    if (flag) {        break;    }}


4.2

扫描范围优化

如果为以下情况,我们会发现最后的6和8所处的位置和最终排序完成的位置一样,说明过程中他们的位置不会发生变化。

上一轮最后交换的位置,在下一轮时,此位置后面的数也不会再发生交换。


改进点2:
记录每一次最后发生交换的位置,下一轮只需要扫描到此位置的前一个即可。

代码实现

// 记录最后交换的位置int position = 0;int len = n - 1;for (int i = 0; i < n - 1; ++i) {    // flag标记是否有交换    bool flag = true;    for (int j = 0; j < len; ++j) {        if (a[j] > a[j + 1]) {            swap(a[j], a[j + 1]);            flag = false;            position = j;        }    }    len = position;    if (flag) {        break;    }}


05

总结

冒泡排序是比较简单的一种排序算法,核心思想就是比较相邻的两个数,但效率比较低所以可做一些优化。时间复杂度为O(N^2),数据规模较小时可采用,但数据过大时就不建议采用冒泡了。


来源:小K算法

作者 :小K

原标题:图解算法:冒泡排序

编辑:hxg、yrLewis

版权声明:本文转载于今日头条,版权归作者所有,如果侵权,请联系本站编辑删除

为您推荐

军考干货!来自“上岸”师兄的征战“宝典”!(一)

又是一年军考季正是复习备考时 为了一道杠的青春为了追逐心中梦想你无惧风雨、无畏艰难一次次的挑灯夜战一遍遍的跌倒重来只为成就更好的自己 此刻的你是不是在畅想“上岸”

2026-01-17 14:22

到底什么是军考?

提到军考相信肯定很多人都并不熟悉,通常大家所知道的高考、艺考、和体考等都是升学考试常见类型,对于军考很多小伙伴不禁感到陌生,就连很多入伍的士兵也有时模糊不清。今天就向

2026-01-17 14:22

军考作文的出题特色,考学战友提前知晓一下

众所周知,作文在语文试卷中分值占比很大,即便是军考也不例外。详看历年军考作文真题,我们可以很明显地发现,军考作文出题具有以下三个显著特色。一、具有军营热度在经过部队大熔

2026-01-17 14:21

2020优秀士兵选拔干部综合知识考试大纲

2020 年从优秀士兵中选拔干部综合知识考试大纲(大学毕业生士兵提干推荐对象、优秀士兵保送入学对象)为便于大学生士兵提干推荐对象、优秀士兵保送入学对象了解从优秀士兵中

2026-01-17 14:21

鞍山人社政策天天讲(第十讲):民办职业培训学校的申办

为做好共性诉求问题办理,及时回应企业百姓关切,现开设“人社政策天天讲”专栏,对鞍山人社政策进行权威发布。第1条 民办培训学校的设立(一)申请筹设。申请筹设民办职业培训学校的

2026-01-17 14:20

深圳中学龙华学校选址终于确定了!

深圳中学龙华学校近期,在深圳市规划和自然资源局网站“深圳市地名一张图”站内查询到,深圳中学龙华学校地图定位,以及地名批准详情。具体位于龙华区民治街道工业路路南面中华路

2026-01-17 14:20