1.冒泡排序
冒泡排序从列表的开头处开始,逐个比较相邻两个数据,如果前面的值大于后面的值,交换两个数据的位置,一直比较到列表的末尾。这个过程就是将最大的项以冒泡的方式排到末尾。然后算法从列表开头到倒数第二项重复这一过程,依次类推。
def bubble_sort(alist):
for j in range(len(alist)-1,0,-1):
for i in range(j):
if alist[i] > alist[i+1]:
alist[i], alist[i+1] = alist[i+1], alist[i]
alist = [1, 4, 3, 8, 5]
bubble_sort(alist)
print(alist)
冒泡排序优化
可以加入判断,如果没有元素交换,说明数据在排序过程中已经有序,直接退出循环,减少不必要的循环。
def bubble_sort(alist):
for j in range(len(alist)-1,0,-1):
swapped = False
for i in range(j):
if alist[i] > alist[i+1]:
swapped = True
alist[i], alist[i+1] = alist[i+1], alist[i]
if not swapped:
break
alist = [1, 4, 3, 8, 5]
bubble_sort(alist)
print(alist)
2.选择排序
选择排序的工作原理如下:首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。
实现思路:设第一个元素为比较元素,依次和后面的元素比较,比较完所有元素找到最小的元素,将它和第一个元素互换。重复上述操作,我们找出第二小的元素和第二个位置的元素互换,以此类推找出剩余最小元素将它换到前面,即完成排序。
def selection_sort(alist):
for i in range(len(alist)-1):
# 将起始元素设为最小元素
min_vx = i
for j in range(i+1, len(alist)):
if alist[j] < alist[min_vx]:
# 记录最小位置
min_vx = j
# 将最小元素与起始元素互换
alist[i], alist[min_vx] = alist[min_vx], alist[i]
alist = [1, 4, 3, 8, 5]
selection_sort(alist)
print(alist)