1,内置的sorted函数
python内置的sorted函数是使用的Timsort算法,该算法是结合了合并排序(merge sort)和插入排序(insertion sort)
# python中的sort函数给字母排序,比较字母的ASCII码,从左往右单个字符的比较如"b">"abcd"
# 如何给包含字典的列表排序
list1=[
{"name":"张三","age":33,"score":21},
{"name": "李四", "age": 23, "score": 76},
{"name":"王五","age":34,"score":65},
{"name":"赵六","age":13,"score":34},
{"name":"田七","age":54,"score":98},
{"name":"王八","age":43,"score":68}
]
list1.sort(key=lambda x:x["score"])
print(list1)
2,快速排序
快速排序的主要思想是从列表中找到一个值作为key,每执行一次快排就会将列表中比这个key大的和小的分开来放,下面我是新建了两个列表left和right,每次排序就会把比key大的放到right,比key小的放到left中,然后每次递归的过程中传过来的list1的长度会越来越小,当长度小于1的时候就返回
def quick_sort(list1):
left=[]
right=[]
# 当列表中只含有一个元素或者为空时返回
if len(list1)<=1:
return list1
# 注意此处的取到的key的值要弹出,在最后返回的时候再加进去
key=list1.pop()
for i in list1:
if i>key:
right.append(i)
else :
left.append(i)
# 此处要返回递归 会先计算left,因为加号是从左向右计算的,
return quick_sort(left)+[key]+quick_sort(right)
3,冒泡排序
不断对相邻的两个数进行比较,每次将最大的数放到列表的最后
def mao_pao(list1):
for i in range(len(list1)-1):
# 每次循环都会将最大的数放到列表末尾
for j in range(0,len(list1)-1-i):
# 每次循环都会比较相邻的两个数,如果遇到前面的数比后面大,就交换
if list1[j]>list1[j+1]:
list1[j],list1[j+1]=list1[j+1],list1[j]
return list1
4,选择排序
通过循环找到列表中最小数的下标,然后将第一个数和最小的数交换位置
def xuan_ze(list1):
min_=0
for i in range(len(list1)-1):
for j in range(i,len(list1)):
if list1[min_]>list1[j]:
min_=j
list1[i],list1[min_]=list1[min_],list1[i]
return list1