啊哈算法--排序算法 (python) - Go语言中文社区

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


前言

这里主要给大家介绍的是啊哈算法中桶排序、冒泡排序和快速排序的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
"""


总结

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

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/qq_43211230/article/details/125435822
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2023-01-03 16:13:22
  • 阅读 ( 268 )
  • 分类:算法

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢