冒泡排序:
def bubble_sort(data):
for i in range(len(data) - 1):
flag = False #设置标识,如果有一轮循环没有发生任何交换,说明已经排序完成
for j in range(len(data) - i - 1):
if data[j] > data[j+1]:
data[j], data[j+1] = data[j+1], data[j]
flag = True #发生交换,就将标识设置为True
if not flag: #没有发生交换,直接return
return data
return data
选择排序:
def choice_sort(data):
for i in range(len(data) - 1):
min = i #初始化最小的元素下标
for j in range(i + 1, len(data)):
if data[min] > data[j]:
min = j #找到最小元素的下标
data[i], data[min] = data[min], data[i] #交换
return data
插入排序:
def insert_sort(data):
for i in range(len(data)):
tmp = data[i]
j = i - 1
while j >= 0 and data[j] > tmp: #找当前位置tmp前面的元素如果比tmp大,就将前面位置的元素覆盖到当前位置,并且继续往前走
data[j+1] = data[j]
j -= 1
data[i] = tmp #直到不能往前走,将tmp覆盖到当前位置
return data
快速排序:
def quick_sort(data, left, right):
if left < right: #定义俩游标,最左边是left,最右边是right
mid = partition(data, left, right) #调用一个函数返回元素列表第一个元素的归序位置
quick_sort(data, left, mid - 1) #递归解决元素左右两边的排序
quick_sort(data, mid + 1, right)
def partition(data, left, right):
tmp = data[left]
while left < right: # 只要左边游标和右边游标没有重合就要一直执行,直到左右重合,data[left]归序完成
while left < right and data[right] >= tmp: #先从left最右边往左看,比tmp大,right往左走
right -= 1
data[left] = data[right] #不满足比tmp大,把该值覆盖到left指向位置
while left < right and data[left] <= tmp: #从right左边往右看,比tmp小,left往右走
left += 1
data[right] = data[left] #不满足比tmp小,把该值覆盖到right指向位置
data[left] = tmp #上面的循环结束,left和right指向同一位置,该位置就是data[left]应该放置的位置
return left