1、冒泡排序(bubble sort)
冒泡排序每次比较相邻的元素,如果前面一个数大,则交换,否则,不交换。
首先,定义了一个随机数列,然后是冒泡排序,时间复杂度O(n^2)
import random
import random
def get_list(num):
list_ = []
for i in range(num):
list_.append(random.randint(0,num))
return list_
def bubble_sort(list1):
for i in range(len(list1)-1,0,-1):
for j in range(i):
if list1[j]>list1[j+1]:
list1[j],list1[j+1]=list1[j+1],list1[j]
return list1
list1 = get_list(10)
print(list1)
list2 = bubble_sort(list1)
print(list2)
结果:
[5, 5, 0, 4, 8, 5, 4, 6, 6, 1]
[0, 1, 4, 4, 5, 5, 5, 6, 6, 8]
每次运行的结果都不一样,但都是从小到大排序。
如果在排序的过程中已经有序,可以提前比较
def bubble_sort(arr):
length=len(arr)
if length<2:
return arr
else:
for i in range(length-1):
flag=False
for j in range(length -1 -i):
if arr[j]>arr[j+1]:
arr[j],arr[j+1] = arr[j+1],arr[j]
flag=True
if not flag:
break
return arr
双向排序-鸡尾酒排序
def cocktail_sort(arr):
length = len(arr)
for i in range(length - 1):
flag = False
for j in range(length -1 -i):
if arr[j]>arr[j+1]:
arr[j], arr[j+1] = arr[j+1], arr[j]
flag = True
if flag:
flag=False
for k in range(length -2 -i, 0, -1):
if arr[k]<arr[k-1]:
arr[k], arr[k-1