简介:
冒泡排序(Bubble sort):时间复杂度O(n^2)
交换排序的一种。其核心思想是:两两比较相邻记录的关键字,如果反序则交换,直到没有反序记录为止。
- 重复列表进行排序,比较每对相邻的项目,如果它 们的顺序错误,则交换它们
- 在每次通过时,未排序的最大元素已被“冒泡 ”到阵列末端的合适位置
- 重复列表直到不需要交换,这表明列表已被排序
属性:
- 属于稳定排序
- O(1) :额外的空间 (best case:在列表本来就拍好序的情况)
- O(n2 ) :比较和交换
- 适应性::O(n) 接近排序时
#算法时间复杂度为O(n*2) ''' 为体现冒牌排序细节的不同, 我写出简单的冒泡排序方法:bubble_sort_easy 和改进后的冒泡排序方法:bubble_sort_imp ''' #简单的冒泡排序方法 #它的问题是当列表本来的顺序就是比较完好;仍会花费复杂的时间空间来排序 def bubble_sort_easy(nums: list): for i in range(len(nums)): # 嵌套的二层循环的index从0开始,所以后面要len(nums)-i-1 for j in range(len(nums) - i - 1): if nums[j] > nums[j + 1]: nums[j], nums[j + 1] = nums[j + 1], nums[j] #交换 return nums nums = [1,2,5,8,4,3,6] bubble_sort_easy(nums) 输出结果 [1, 2, 3, 4, 5, 6, 8] #改进的冒泡排序 ''' 1.加入time计时runing时间 2.加入flag判断列表是否已经不需要继续排序,提高效率 ''' def bubble_sort_imp(nums=list): import time start = time.time() #开始时间 for i in range(len(nums)): # 当 n pass is_sorted = True # 立个flag,当已经排好序的情况时引入Ture的is_sort for j in range(0, len(nums) - i - 1): if (nums[j + 1] < nums[j]): nums[j], nums[j + 1] = nums[j + 1], nums[j] #交换 is_sorted = False #立个False的flag if (is_sorted): break #当不需用到嵌套二层for时退出,提高效率 t = time.time() - start #记下运行时间 return nums,t nums = [1,2,5,8,4,3,6] bubble_sort_imp(nums) #运行结果 ([1, 2, 3, 4, 5, 6, 8], 0.0)