冒泡排序
冒泡排序只会操作相邻的两个数据,每次冒泡操作都会对相邻的两个元素进行比较,看是否满足大小关系要求。
如果不满足就交换元素,一次冒泡 会让至少一个元素移动到它应该在的位置,重复n次,完成n个数据的排序工作。
冒泡排序是原地排序算法吗?
冒泡的过程只涉及相邻数据的交换,只需要常量级的临时空间,是一个原地排序算法(空间复杂度O(1))
冒泡排序算法是稳定算法吗?
当相邻两个元素大小相等的时候,不做交换,即大小相同数据排序前后不变,是稳定的排序算法
什么是有序度?
有序度是数组中具有有序关系的元素对的个数
对于一个完全有序的额数组,有序度是n*(n-1)/2,也称为满有序度
公式:逆有序度 = 满有序度 - 有序度
*
冒泡排序算法是时间复杂度是多少?
假设排序数据是有序,只需要进行一轮冒泡排序,即最好时间复杂度是O(n)
假设排序数据是倒叙排列,需要进行n轮冒泡排序,即最坏时间复杂度是O(n)
用有序度的概念分析平均时间复杂度,就是n(n-1)/4,即平均时间复杂度是O(n)
冒泡排序算法的空间复杂度?
冒泡排序的空间时间复杂度是O(1)
def bubble(array):"""冒泡排序"""for i in range(len(array) - 1):for j in range(len(array) - i - 1):if array[j] > array[j + 1]:array[j], array[j + 1] = array[j + 1], array[j]print(array)bubble([8346, 4675, 2985, 5917, 5275, 7284, 9516, 6532])
