前言
这里主要给大家介绍的是啊哈算法中桶排序、冒泡排序和快速排序的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
"""
总结
快速排序算法中的两个哨兵一定要先从右往左遍历,然后再从左往右遍历的,每次遍历完都将交换两个哨兵。