冒泡排序

就是一次循环,两两数据比较,将最大值放入末尾,此时找到了最大值,然后进行二次三次等循环,直到排序结束

冒泡排序代码

def bubble_sort_v1(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] = tempdef bubble_sort_v2(array=[]):for i in range(len(array)-1):# 有序标记,每一轮的初始是trueis_sorted = Truefor 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# 有元素交换,所以不是有序,标记变为falseis_sorted = Falseif is_sorted:breakdef bubble_sort_v3(array=[]):# 记录最后一次交换的位置last_exchange_index = 0# 无序数列的边界,每次比较只需要比到这里为止sort_border = len(array)-1for i in range(len(array)-1):# 有序标记,每一轮的初始是trueis_sorted = Truefor j in range(sort_border):if array[j] > array[j+1]:temp = array[j]array[j] = array[j+1]array[j+1] = temp# 有元素交换,所以不是有序,标记变为falseis_sorted = False# 把无序数列的边界更新为最后一次交换元素的位置last_exchange_index = jsort_border = last_exchange_indexif is_sorted:breakmy_array = list([3, 4, 14, 1, 5, 6, 7, 8, 1, -1, 0, 9, 11])bubble_sort_v3(my_array)print(my_array)

鸡尾酒排序

是冒泡排序的优化,两侧排序

def cock_tail__sort(array=[]):for i in range(len(array) // 2):# 有序标记,每一轮的初始是trueis_sorted = True# 奇数轮,从左向右比较和交换for j in range(i, len(array)-i-1):if array[j] > array[j+1]:temp = array[j]array[j] = array[j+1]array[j+1] = temp# 有元素交换,所以不是有序,标记变为falseis_sorted = Falseif is_sorted:break# 偶数轮之前,重新标记为trueis_sorted = True# 偶数轮,从右向左比较和交换for j in range(len(array)-i-1, i, -1):if array[j] < array[j-1]:temp = array[j]array[j] = array[j-1]array[j-1] = temp# 有元素交换,所以不是有序,标记变为falseis_sorted = Falseif is_sorted:breakmy_array = list([3, 4, 14, 1, 5, 6, 7, 8, 1, -1, 0, 9, 11])cock_tail__sort(my_array)print(my_array)