排序是计算机程序中的主要任务之一,数组的元素按特定顺序排列。排序使搜索更容易。冒泡排序和选择排序是排序算法,可以通过它们使用的排序方法加以区分。冒泡排序本质上是交换元素,而选择排序通过选择元素来执行排序。
二者的另一个显著区别是冒泡排序是一种稳定的算法,而选择排序是一种不稳定的算法。稳定的意思是,在列表或数组排序前后,具有相同值的记录以相同的顺序出现。一般来说,大多数稳定快速的算法都使用额外的内存。
对比图
比较项 | 冒泡排序 | 选择排序 |
---|---|---|
基本 | 相邻元素进行比较和交换 | 选择最大的元素并与最后一个元素交换(在升序的情况下) |
最佳情况时间复杂度 | O(n) | O( n 2 n^2 n2) |
效率 | 效率低 | 比冒泡排序效率高 |
稳定 | 是 | 否 |
方法 | 交换 | 选择 |
速度 | 慢 | 比冒泡排序快 |
冒泡排序的定义
冒泡排序是最简单的迭代算法,它将每个元素与它旁边的元素进行比较,并在需要时交换它们。简单地说,它比较列表的第一个和第二个元素,当它们的顺序不正确时,交换它们。类似地,第二个和第三个元素被比较和交换,这种比较和交换继续到列表的末尾。
第一次迭代中的比较次数是n-1,其中n是数组中的元素数。第一次迭代后,最大的元素位于第n个位置。每次迭代后,比较次数减少,最后一次迭代只进行一次比较。
此算法是最慢的排序算法。冒泡排序的最佳情况复杂度(当列表按顺序排列时)的顺序为n(O(n)),最坏情况复杂度为O(
n
2
n^2
n2)。在最好的情况下,它的顺序是n,因为它只是比较元素而不交换它们。这种技术还需要额外的空间来存储临时变量。
选择排序的定义
选择排序的性能略好于冒泡排序算法,而且效率较高。假设我们要按升序排列一个数组,那么它的作用是找到最大的元素并与最后一个元素交换,然后在子数组上重复以下过程,直到整个列表被排序。
在选择排序中,已排序数组和未排序数组没有任何区别,最佳和最坏情况下的复杂度都消耗了
n
2
n^2
n2(O(
n
2
n^2
n2))的数量级。选择排序比气泡排序快。
冒泡排序和选择排序的主要区别
- 在冒泡排序中,如果需要,每个元素及其相邻元素都会进行比较和交换。另一方面,选择排序通过选择元素并将该特定元素与最后一个元素交换来工作。所选元素可以是最大的,也可以是最小的,具体取决于升序或降序。
- 两种算法的最坏情况复杂度相同,即O( n 2 n^2 n2),但最佳复杂度不同。冒泡排序使用n个时间顺序,而选择排序使用 n 2 n^2 n2个时间顺序。
- 冒泡排序是一种稳定的算法,而选择排序是不稳定的。
- 选择排序算法是快速和有效的,相比而言,冒泡排序是非常缓慢和低效的。
结论
冒泡排序算法被认为是最简单、最低效的算法,而选择排序算法比冒泡排序算法效率更高。冒泡排序还需要额外的空间来存储临时变量,并且需要更多的交换。
参考文档
[1]techdifferences.com.Difference Between Bubble Sort and Selection Sort[EB/OL].https://techdifferences.com/difference-between-bubble-sort-and-selection-sort.html,2021-01-01.
[2]Baidu.排序算法稳定性[EB/OL].https://baike.baidu.com/item/排序算法稳定性/9763250,2020-04-13.