一、冒泡排序
冒泡排序是经过n次循环,每次循环对数据进行前后两个数对比,每次循环都把前n-i个数中的最大值往后放,最终使整个数组变成有序数组,时间复杂度为O(n²)(n为数组的长度)
def bubble_sort(data_list):
length = len(data_list)
for i in range(length):
for j in range(length-i-1):
# 两两对比,小于就交换位置
if data_list[j+1] < data_list[j]:
data_list[j+1], data_list[j] = data_list[j], data_list[j+1]
return data_list
二、快速排序
快速排序是冒泡排序的一种改进,采用分制的方法,取一个数为基准,比基准小的放左边,比基准大的放右边,然后对左右两边的进行同样的操作,直到最后数组不能拆分成左右两边,时间复杂度O(n²)
def quick_sort(data_list):
if len(data_list) < 2:
return data_list
temp = data_list[0]
data_list.remove(temp)
left_list = []
right_list = []
for i in range(len(data_list)):
# 比基数小的放到一边,比基数大的放到另一边
if data_list[i] <= temp:
left_list.append(data_list[i])
else:
right_list.append(data_list[i])
return left_list + [temp] + right_list
三、插入排序
插入排序类似扑克牌,假设右手去抓拍,左手收集右手抓到的牌,左手的牌根据从小到大的规则依次插入,时间复杂度O(n²)
def insert_sort(data_list):
for i in range(1, len(data_list)):
for j in range(i, 1, -1):
# 从后往前找,如果小于,就往前放,如果大于,说明已经是最大的(因为前面都是从小到大排序)
if data_list[j] < data_list[j-1]:
data_list[j], data_list[j, -1] = data_list[j-1], data_list[j]
else:
break
四、选择排序
选择排序是从未排序的数组中找到最小(大)的数放到最开始(末尾)位置,每次找到一个,直到全部排序完成
def choice_sort(data_list):
for i in range(len(data_list)):
min_index = i
for j in range(i+1, len(data_list)):
# 后面的每个数和当前找到的最小的对比,比当前小的直接替换当前索引,成为最小的
if data_list[j] < data_list[min_index]:
min_index = j
if i != min_index:
data_list[i], data_list[min_index] = data_list[min_index], data_list[i]
return data_list