- 排序算法的稳定性
假设序列中有两个相同的值,不过排序完成之后这两个相同值的相对位置保持不变,就是这个排序算法时稳定的;反之,则排序算法不稳定
在实际中要求稳定性的场景也不多
- 原理
以升序为例
每一步两个一比,更大值后移;每一轮把最大值移动到最后;大的就像一个泡,一步一步冒到后面
-
实现
def bubbltsort(alist): n = len(alist) for i in range(n-1, 0, -1): for j in range(i): if alist[j]>alist[j+1]: alist[j], alist[j+1] = alist[j+1], alist[j]
-
测试
if __name__ == '__main__': print(list(range(9,0,-1))) ll = [3,6,2,4,7,5,8,1,0] print(ll) bubbltsort(ll) print(ll)
-
时间复杂度
- 最优时间复杂度:O(n) (表示遍历一次发现没有任何可以交换的元素,排序结束。)
- 最坏时间复杂度:O(n^2)(每一步都要交换位置)
- 稳定性:稳定