文章目录
- 选择排序和冒泡排序区别
-
-
- [选择排序(Selection Sort)](#选择排序(Selection Sort))
- [冒泡排序(Bubble Sort)](#冒泡排序(Bubble Sort))
- 区别总结
-
- 如何理解:选择排序中交换可能改变相同元素的相对顺序
选择排序和冒泡排序区别
要理解选择排序中交换可能改变相同元素的相对顺序,先回顾一下选择排序和冒泡排序区别:
选择排序(Selection Sort)
-
算法思想:
- 选择排序每次从未排序的部分中选择最小(或最大)的元素,并将其放到已排序部分的末尾。
-
步骤:
- 从未排序的部分中找到最小(或最大)的元素。
- 将该元素与未排序部分的第一个元素交换位置。
- 重复上述过程,直到所有元素都被排序。
-
时间复杂度:
- 最好、最坏和平均情况的时间复杂度都是 (O(n^2))。
- 交换操作较少,最多进行 (n-1) 次交换。
-
空间复杂度:
- 空间复杂度为 (O(1)),因为选择排序是原地排序。
冒泡排序(Bubble Sort)
-
算法思想:
- 冒泡排序通过多次遍历数组,每次比较相邻元素并交换顺序错误的元素,使得每次遍历后最大(或最小)的元素"冒泡"到数组的一端。
-
步骤:
- 从数组的第一个元素开始,依次比较相邻的两个元素,如果前一个比后一个大(或小),则交换它们的位置。
- 对整个数组进行多次遍历,直到没有需要交换的元素为止。
-
时间复杂度:
- 最好情况的时间复杂度是 (O(n))(当数组已经有序时,只需一次遍历)。
- 最坏和平均情况的时间复杂度都是 (O(n^2))。
- 交换操作较多。
-
空间复杂度:
- 空间复杂度为 (O(1)),因为冒泡排序也是原地排序。
区别总结
- 算法复杂度:两者在最坏和平均情况下的时间复杂度相同,都是 (O(n^2))。但是选择排序在交换次数上通常比冒泡排序少。
- 实现方式:选择排序每次找到最小(或最大)元素放到已排序部分,冒泡排序则是通过多次相邻元素的比较和交换来排序。
- 稳定性:冒泡排序是稳定排序,选择排序是不稳定排序(因为选择排序中交换可能改变相同元素的相对顺序)。
- 适用场景:在实际应用中,两者的使用较少,通常使用更高效的排序算法如快速排序或归并排序。但在数据量小且对交换次数要求高的情况下,可以考虑选择排序。
如何理解:选择排序中交换可能改变相同元素的相对顺序
选择排序中交换可能改变相同元素的相对顺序,这使得选择排序成为一种不稳定的排序算法。理解这一点可以通过具体的例子来说明:
示例
假设有一个数组 arr
,包含以下元素:
[ \text{arr} = [4, 2, 3, 4, 1] ]
在这个数组中,有两个相同的元素 4
。现在我们使用选择排序来对这个数组进行排序。
选择排序步骤
-
第一轮(选择最小元素 1):
- 找到数组中最小的元素
1
,它位于索引 4。 - 将
1
与数组的第一个元素4
交换。 - 数组变为:[ 1, 2, 3, 4, 4 ]
- 找到数组中最小的元素
-
第二轮(选择最小元素 2):
- 找到剩余部分中最小的元素
2
,它已经在索引 1。 - 不需要交换。
- 数组保持不变:[ 1, 2, 3, 4, 4 ]
- 找到剩余部分中最小的元素
-
第三轮(选择最小元素 3):
- 找到剩余部分中最小的元素
3
,它已经在索引 2。 - 不需要交换。
- 数组保持不变:[ 1, 2, 3, 4, 4 ]
- 找到剩余部分中最小的元素
-
第四轮(选择最小元素 4):
- 找到剩余部分中最小的元素
4
,它已经在索引 3。 - 不需要交换。
- 数组保持不变:[ 1, 2, 3, 4, 4 ]
- 找到剩余部分中最小的元素
在这个例子中,两个 4
的相对顺序没有改变,所以你可能会问为什么选择排序是不稳定的。让我们看看一个可能改变相对顺序的情况:
假设有一个数组:
[ \text{arr} = [4a, 2, 3, 4b, 1] ]
其中 4a
和 4b
是两个相同的元素,但我们用 a
和 b
来区分它们的相对顺序。
- 第一轮(选择最小元素 1) :
- 找到数组中最小的元素
1
,它位于索引 4。 - 将
1
与数组的第一个元素4a
交换。 - 数组变为:[ 1, 2, 3, 4b, 4a ]
- 找到数组中最小的元素
你可以看到,现在 4b
在 4a
之前了,这改变了它们的相对顺序。
关键点
选择排序在选择最小(或最大)元素并交换时,不会考虑相同元素的相对位置。因此,如果排序过程中涉及到相同元素的交换,原有的相对顺序可能会被打乱。
稳定排序的定义
稳定排序是指如果在排序前的数组中,有两个相同的元素 A
和 B
,且 A
在 B
之前,在排序后的数组中 A
仍然在 B
之前。例如,冒泡排序和插入排序是稳定的,因为它们不会改变相同元素的相对顺序。
选择排序的这种行为导致它成为一种不稳定的排序算法。