python中的排序算法

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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值