持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第7天
排序
一、什么是排序
1.将数字按从小到大的顺序排列
2.排序
排序就是将输入的数字按照从小到大的顺序进行排列。这里我们用柱形来表示数字,数字越大,柱形就越高。
假设现在有如上图所示的输入数据,那么我们的目标就是将它们像下图一样,按从小到大的顺序从左边开始依次排列。
如果只有10个数字,手动排序也能轻松完成,但如果有10000个数据,排序就不那么容易了。这时,使用高效率的排序算法便是解决问题的关键。
3.各种各样的排序算法
由于排序是一个比较基础的问题,所以排序算法的种类也比较多。
二、冒泡排序
冒泡排序就是重复“从序列右边开始比较相邻两个数字的大小,再根据结果交换两个数字的位置”这一操作的算法。在这个过程中,数字会像泡泡一样,慢慢从右往左“浮”到序列的顶端,所以这个算法才被称为“冒泡排序”
图解
01
在序列的最右边放置一个天平,比较天平两边的数字。如果右边数字较小,就交换这两个数字的位置
02
6<7,所以交换这两个数字
03
完成后,天平往左移动一个位置,比较两个数字的大小,此处4<6,所以无需交换
04
继续将天平往左移动一个位置并比较数字,重复操作
05
不断对数字交换,将最小数字移动到最左边
06
最左边数字归位
07
将天平移回最右边,然后重复之前的操作,直到天平到达左边第二个位置为止
08
当天平到达左边第二个位置时,序列第二小的数字也就到达了指定位置
09
将天平再次移回最右边,重复操作直到所有数字都归位
10
排序中......
11
排序中......
12
排序完成
解说
在冒泡排序中,第1轮需要比较n-1次,第2轮需要比较n-2次……第n-1轮需要比较1次。因此,总的比较次数为(n-1)+(n-2)+…+1≈n²/2。这个比较次数恒定为该数值,和输入数据的排列顺序无关。
交换数字的次数和输入数据的排列顺序有关。冒泡排序的时间复杂度为O(n²)。