啊哈算法--排序算法 (python)

本文详细介绍了三种经典的排序算法——桶排序、冒泡排序和快速排序的Python实现。通过示例代码展示了每种排序算法的逻辑,并提供了测试样例。快速排序中强调了哨兵的重要性,即先从右往左再从左往右遍历以确保正确排序。
摘要由CSDN通过智能技术生成

前言

这里主要给大家介绍的是啊哈算法中桶排序、冒泡排序和快速排序的python版本。

一、桶排序

book = [0 for _ in range(1001)] # 作为桶排序的桶
n = int(input())
nums = list(map(int, input().split()))
for i in range(n):
    book[nums[i]] += 1
# 输出
for i in range(1000,-1,-1): # 依次判断编号1000-0的桶看其内部是否存在元素
    for _ in range(book[i]):
        print(i, end = ' ')
"""
测试样例
10 
8 100 50 22 15 6 1 1000 999 0
"""

二、冒泡排序

# 输入
n = int(input())
nums = list(map(int,input().split()))
# 进行冒泡排序
for i in range(n-1): # n个数只用进行n-1遍
    for j in range(n-i-1): # 每遍历一次确定最后一个元素,下次需要判断的元素就少一个
        if nums[j] < nums[j+1]:
            nums[j], nums[j+1] = nums[j+1], nums[j]
print(nums)
"""
测试样例
10 
8 100 50 22 15 6 1 1000 999 0
"""

三、快速排序

def quicksort(left, right):
    if left > right:
        return
    i, j = left, right
    temp = nums[left] # temp保存的是基函数
    while i != j:
        # 要先从右往左遍历
        while nums[j]  >= temp and i < j:
            j -= 1
        # 在从左往右遍历
        while nums[i] <= temp and i<j:
            i += 1
        if i < j: # 当哨兵没有相遇时
            nums[i], nums[j] = nums[j], nums[i]
    # 将基函数归位
    nums[left] = nums[i]
    nums[i] = temp
    # 因为第i个元素已经确定位置了因此之后需要判断的是区间[left, i-1]和区间[i+1, right]
    quicksort(left, i-1)
    quicksort(i+1, right)
    return

if __name__ == '__main__':
    n = int(input())
    nums =  list(map(int,input().split()))
    quicksort(0,n-1)
    print(nums)

"""
测试样例
10 
6 1 2 7 9 3 4 5 10 8
"""


总结

快速排序算法中的两个哨兵一定要先从右往左遍历,然后再从左往右遍历的,每次遍历完都将交换两个哨兵。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值