冒泡排序和选择排序区别
1.稳定性
冒泡排序稳定排序。(例如 1,2,3,2,4 排完序后两个2,2 先后顺序不变)
选择排序不稳定排序。
2.都属于比较排序,交换成本不同。
冒泡排序需要相邻元素比较,如果当前元素大于后一个元素进行交换,每次把最大的数沉到最下面。
选择排序,先选择后交换,减少交换次数。
冒泡排序
标准冒泡排序:
def sort_bb(nums):
n = len(nums)
for i in range(n-1):
for j in range(n-2, i-1, -1):
if nums[j] > nums[j+1]:
nums[j], nums[j+1] = nums[j+1], nums[j]
另一个版本(下沉)
比较相邻的元素。如果第一个比第二个大,就交换他们两个,稳定排序
def bubble_sort(num_list):
cnt = len(num_list)
for i in range(cnt-1):
for j in range(0, cnt - i - 1):
if num_list[j] > num_list[j+1]: # 大数放最后面
num_list[j], num_list[j+1] = num_list[j+1], num_list[j]
时间复杂度为:O( n^2 )
空间复杂度就是在交换元素时那个临时变量所占的内存空间;O(1)
稳定的
选择排序
- 第一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,
- 然后再从剩余的未排序元素中寻找到最小(大)元素,然后放到已排序的序列的末尾。
- 以此类推,直到全部待排序的数据元素的个数为零。不稳定排序。
标准选择排序:
def select_sort(nums):
n = len(nums)
for i in range(n-1):
min = i
for j in range(i+1, n):
if nums[min] > nums[j]:
min = j
if i != min:
nums[i], nums[min] = nums[min], nums[i]
时间复杂度为:O( n^2 )
空间复杂度就是在交换元素时那个临时变量所占的内存空间;O(1)
不稳定的