1.排序算法(https://blog.csdn.net/hl_java/article/details/72499914)
2. 为什么冒泡排序?
https://blog.csdn.net/zdf19/article/details/53886940
而网上和书上的很多说O(n)是因为加了优化。初始didswap=false. 当发生一次交换就将didswap置为true,这样如果原始有序,那么一次扫描完一次交换也不会有,即didswap=false,此时return,终止排序。此时时间复杂度是O(n).note:原始数据只要有一对需要改顺序,复杂度就又会变成O(n^2)的。
def bubble_sort(nums):
for i in range(len(nums) - 1): # 这个循环负责设置冒泡排序进行的次数
for j in range(len(nums) - i - 1): # j为列表下标
if nums[j] > nums[j + 1]:
nums[j], nums[j + 1] = nums[j + 1], nums[j]
return nums
print(bubble_sort([45, 32, 8, 33, 12, 22, 19, 97]))
# 输出:[8, 12, 19, 22, 32, 33, 45, 97]
这种最好复杂度还是O(N^2)
下面加个标志就不是了,最好的就是O(N),且是开始便是有序的这一唯一情况。当值是相等的时候,不会交换位置,所以是稳定的
didswap = false
def bubble_sort(nums):
for i in range(len(nums) - 1): # 这个循环负责设置冒泡排序进行的次数
for j in range(len(nums) - i - 1): # j为列表下标
if nums[j] > nums[j + 1]:
nums[j], nums[j + 1] = nums[j + 1], nums[j]
didswap = true
if diswap == false:
return nums
return nums
print(bubble_sort([45, 32, 8, 33, 12, 22, 19, 97]))
# 输出:[8, 12, 19, 22, 32, 33, 45, 97]