Python实现几个排序

本文对比介绍了冒泡排序和快速排序的Python实现,通过实例演示了冒泡排序逐趟交换的过程,以及快速排序的分治策略。重点讲解了快速排序的C++风格和Python特性版本,并展示了如何在实际场景中调用这两种排序算法。
摘要由CSDN通过智能技术生成

1.冒泡排序

原理:依次比较相邻两个元素的值,不符合条件就交换,每执行完一趟会将最大值(或最小值)放到最右面(相对最右面)。具体百度。

def maopao(a):
    for i in range(len(a)-1,-1,-1):  #len得到a的长度,此处为9,但下标从0开始最多为8,所以-1
        for j in range(0,i):          #第二个-1,代表到0结束,range的用法;第三个-1,代表依次-1
            if (a[j+1]<a[j]):
                k = a[j+1]
                a[j+1] = a[j]
                a[j] = k
    return a
a = [5,3,7,6,4,10,2,9,8]
print(maopao(a))

结果:[2, 3, 4, 5, 6, 7, 8, 9, 10]

解析:外循环是从大到小的,例如:开始i=8,经过一次完整内循环后,整个序列最大值会在a[8]的位置,此a[8]的值就为10,不会再改变了,以后的操作不会对a[8]进行;然后i-1=7,经过内循环后,得到整个序列第二大的值 a[7]=9;依次重复上述步骤,直到i=0,循环结束。

2.快速排序

  仿c++写

def quicks(a,l,r):
    if l>=r:
        return
    i = l
    j = r
    k = a[l]
    while(i<j):
        while(i<j and a[j]>=k):
            j = j-1
        a[i] = a[j]
        while(i<j and a[i]<=k):
            i = i+1
        a[j] = a[i]
    a[i] = k
    quicks(a,l,i-1)
    quicks(a,i+1,r)

def mainj():
    a = [8,5,7,6,4,10,8,9,8]
    quicks(a,0,8)
    for x in range(0,9):
        print(a[x])

mainj()

真正运用Python特性(抄作业):

def quick_sort(data):
    if len(data) >= 2:  # 递归入口及出口
        mid = data[len(data) // 2]  # 选取基准值,也可以选取第一个或最后一个元素  “//”取整
        left, right = [], []  # 定义基准值左右两侧的列表
        data.remove(mid)  # 从原始数组中移除基准值
        for num in data:
            if num >= mid:
                right.append(num)
            else:
                left.append(num)
        return quick_sort(left) + [mid] + quick_sort(right)
    else:
        return data
# 示例:
array = [2, 3, 5, 7, 1, 4, 6, 15, 5, 2, 7, 9, 10, 15, 9, 17, 12]
print(quick_sort(array))

待完成...

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值