算法初接触 | 排序[冒泡排序]

93 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第7天

排序

一、什么是排序

1.将数字按从小到大的顺序排列

2.排序

排序就是将输入的数字按照从小到大的顺序进行排列。这里我们用柱形来表示数字,数字越大,柱形就越高。
f0bad758456baa0acc394205e367835.jpg
假设现在有如上图所示的输入数据,那么我们的目标就是将它们像下图一样,按从小到大的顺序从左边开始依次排列。
444b90290c24b528e1903783aaa01aa.jpg
如果只有10个数字,手动排序也能轻松完成,但如果有10000个数据,排序就不那么容易了。这时,使用高效率的排序算法便是解决问题的关键。

3.各种各样的排序算法

由于排序是一个比较基础的问题,所以排序算法的种类也比较多。

二、冒泡排序

冒泡排序就是重复“从序列右边开始比较相邻两个数字的大小,再根据结果交换两个数字的位置”这一操作的算法。在这个过程中,数字会像泡泡一样,慢慢从右往左“浮”到序列的顶端,所以这个算法才被称为“冒泡排序”

图解

01

1.jpg
在序列的最右边放置一个天平,比较天平两边的数字。如果右边数字较小,就交换这两个数字的位置

02

2.jpg
6<7,所以交换这两个数字

03

3.jpg
完成后,天平往左移动一个位置,比较两个数字的大小,此处4<6,所以无需交换

04

4.jpg
继续将天平往左移动一个位置并比较数字,重复操作

05

5.jpg
不断对数字交换,将最小数字移动到最左边

06

6.jpg
最左边数字归位

07

7.jpg
将天平移回最右边,然后重复之前的操作,直到天平到达左边第二个位置为止

08

8.jpg
当天平到达左边第二个位置时,序列第二小的数字也就到达了指定位置

09

9.jpg
将天平再次移回最右边,重复操作直到所有数字都归位

10

10.jpg
排序中......

11

11.jpg
排序中......

12

12.jpg
排序完成

解说
在冒泡排序中,第1轮需要比较n-1次,第2轮需要比较n-2次……第n-1轮需要比较1次。因此,总的比较次数为(n-1)+(n-2)+…+1≈n²/2。这个比较次数恒定为该数值,和输入数据的排列顺序无关。
交换数字的次数和输入数据的排列顺序有关。冒泡排序的时间复杂度为O(n²)。