1、冒泡排序
从第一个元素开始,两两比较相邻元素,如果第一个元素比第二个元素大,则交换相邻元素,这样每经过一轮排序,就会有一个元素在最终位置上。
优化:设置一个flag,当在一次遍历中没有元素交换位置,说明列表已经有序。
时间复杂度:最坏:O(n^2), 平均:O(n^2), 最好:O(n)
空间复杂度:O(1)
稳定的排序算法
def bubble_sort(l):
for i in range(len(l)-1): # len(l)-1轮排序,把len(l)-1个元素排在相应位置,最后一个元素也在相应的位置
flag = 1
for j in range(len(l)-i-1):
if l[j+1]<l[j]:
flag = 0
l[j], l[j+1] = l[j+1], l[j]
if flag:
break
return l
2、选择排序
每轮循环从未排序元素中选择一个最大的,排在列表的最后位置
因为每轮只选择一个元素,所以选择排序没有优化算法,一定会循环n轮,不适合大规模数据
时间复杂度(最差/平均/最优):O(n^2) O(n