python 排序算法

冒泡排序

arr = [4, 3, 2, 5, 1, 8, 6, 7]
a = 0
while a < len(arr) - a:
    for j in range(len(arr)-a-1):
        if arr[j] > arr[j + 1]:
            temp = arr[j]
            arr[j] = arr[j + 1]
            arr[j + 1] = temp
    a = a + 1
print(arr) 
输出:[1, 2, 3, 4, 5, 6, 7, 8]

选择排序

arr = [9, 3, 2, 5, 1, 8, 6, 7, 4, 10]
for i in range(len(arr)-1):
    min = i
    j = i+1
    while j < len(arr):
        if arr[j] < arr[min]:
            min = j
        j = j+1
    if min != i:
        temp = arr[i]
        arr[i] = arr[min]
        arr[min] = temp

print(arr)
输出:[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

插入排序

arr = [4, 3, 2, 5, 1, 8, 6, 7]
for i in range(len(arr)-1):
    i = i + 1
    temp = arr[i]
    change = 'false'
    j = i - 1
    while j >= 0:
        if arr[j] > temp:
            arr[j+1] = arr[j]
            change = 'true'
        else:
            break
        j = j - 1
    if change == 'true':
        arr[j+1] = temp

print(arr)
输出:[1, 2, 3, 4, 5, 6, 7, 8]

快速排序


list = [2,1,5,4,8,7,6,3]

def quick_sort(list):
    left = []
    pivotList = []
    right = []
    # 递归出口
    if len(list) <= 1:
        return list
    else:
        # 将第一个值做为基准
        pivot = list[0]
        for i in list:
            # 将比急转小的值放到left数列
            if i < pivot:
                left.append(i)
            # 将比基准打的值放到right数列
            elif i > pivot:
                right.append(i)
            # 将和基准相同的值保存在基准数列
            else:
                pivotList.append(i)
        # 对less数列和more数列继续进行排序
        less = quick_sort(left)
        more = quick_sort(right)
        return less + pivotList + more
    
print(quick_sort(list))
输出:[1, 2, 3, 4, 5, 6, 7, 8]

python内置的排序函数

sort 与 sorted
区别:
sort 是应用在 list 上的方法,sorted 可以对所有可迭代的对象进行排序操作。
list 的 sort 方法返回的是对已经存在的列表进行操作,而内建函数 sorted 方法返回的是一个新的 list,而不是在原来的基础上进行的操作。
sort

arr = [4, 3, 2, 5, 1, 8, 6, 7]
arr.sort()
print(arr)
输出:[1, 2, 3, 4, 5, 6, 7, 8]

sorted

arr = [4, 3, 2, 5, 1, 8, 6, 7]
print('sorted排序生成新的临时的={}'.format(sorted(arr)))
print('原来的arr不变={}'.format(arr))
输出:
sorted排序生成新的临时的=[1, 2, 3, 4, 5, 6, 7, 8]
原来的arr=[4, 3, 2, 5, 1, 8, 6, 7]

sorted 的应用,也可以通过 key 的值来进行数组/字典的排序,比如:

array = [{"age":20,"name":"a"},{"age":25,"name":"b"},{"age":10,"name":"c"}]
array = sorted(array,key=lambda x:x["age"])
print(array)
输出结果:
[{'age': 10, 'name': 'c'}, {'age': 20, 'name': 'a'}, {'age': 25, 'name': 'b'}]

先按照成绩降序排序,相同成绩的按照名字升序排序:

d1 = [{'name':'alice', 'score':38}, {'name':'bob', 'score':18}, {'name':'darl', 'score':28}, {'name':'christ', 'score':28}]
l = sorted(d1, key=lambda x:(-x['score'], x['name']))
print(l)
输出结果:
[{'name': 'alice', 'score': 38}, {'name': 'christ', 'score': 28}, {'name': 'darl', 'score': 28}, {'name': 'bob', 'score': 18}]

资料

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值