各种排序算法
O(n2)
——————————————————————————————
冒泡排序,稳定排序
每一轮都要遍历所有元素,总共遍历(元素数量 - 1)轮
# 冒泡排序,最大的冒泡上去,最后元素最大
def bubble_sort1(array = []):
for i in range(len(array) - 1):
for j in range(len(array) - i - 1):
if array[j] > array[j + 1]:
temp = array[j]
array[j] = array[j + 1]
array[j + 1] = temp
# 冒泡优化,设置标志位
def bubble_sort2(array = []):
for i in range(len(array) - 1):
# 有序标记,每一轮初始值是True
is_sorted = True
for j in range(len(array) - i - 1):
if array[j] > array[j + 1]:
temp = array[j]
array[j] = array[j + 1]
array[j + 1] = temp
# 有元素交换,所以是有序的,标记变为False
is_sorted = False
# 如果发现标志位没有变为False,意思是没有交换,已经有序,则直接退出
if is_sorted:
break
# 优化3,在每一轮排序后,记录下最后一次元素交换的位置,则该位置即为无序数列的边界,再往后就是有序曲了
def bubble_sort3(array = []):
# 记录最后一次交换的位置
last_exchange_index = 0
# 无序数列的边界,每次比较只需比到这里
sort_border = len(array) - 1
for i in range(len(array) - 1):
# 有序标记,每一轮的初始是True
is_sorted = True
for j in range(sort_border):
if array[j] > array[j + 1]:
temp = array[j]
array[j] = array[j + 1]
array[j + 1] = temp
# 已经交换,所以变为False
is_sorted = False
# 把无序数列的边界值更新为最后一次交换元素的位置
last_exchange_index = j
sort_border = last_exchange_index
if is_sorted:
break
my_array = list([3,5,7,2,3,44,5,0])
bubble_sort1(my_array)
print(my_array) #[0, 2, 3, 3, 5, 5, 7, 44]
选择排序
# 选择排序
# 找最小的小标,然后交换,最后循环(数组长度 -1 )
def selectionSort(array = []):
for i in range(len(array) - 1):
# 记录最小数的索引
minIndex = i
for j in range(i + 1, len(array)):
if array[j] < array[minIndex]:
minIndex = j
# i 不是最小数字时,将i和最小数进行交换
if i != minIndex