关于各种排序算法的动画演示 https://visualgo.net/zh/sorting?slide=1
- 冒泡排序
- 比对的次数复杂度是O(n^2),交换的时间复杂度也是O(n^2)
- 优势:无需额外的存储空间,可以在链表上操作
- 原理:比较两个相邻的元素,将值大的元素交换到右边
def bubbleSort(alist): for passnum in range(len(alist)-1,0,-1): for i in range(passnum): if alist[i] > alist[i+1]: alist[i],alist[i+1] = alist[i+1],alist[i]
- 性能改进:如果某趟比对没有发生任何交换,说明列表已经排好序,可以提前结束算法
def shortbubbleSort(alist): exchanges = True passnum = len(alist)-1 while passnum > 0 and exchanges: exchanges = False for i in range(passnum): if alist[i] > alist[i+1]: alist[i],alist[i+1] = alist[i+1],alist[i] exchanges = True passnum -= 1