数列排序
简单版:
n = int(input())
nums = list(map(int,input().split()))
# 创建一个列表,使用 split() 函数进行分割
# map() 函数根据提供的函数对指定序列做映射,就是转化为int型
nums.sort()
for i in nums:
print(i,end=" ")
快排:
n = int(input())
nums = list(map(int,input().split()))
def quick_sort(nums,l,r):
# 递归结束条件
if l>=r:
return
# 确定分界点
x = nums[l]
# 调整区间 指针
i,j = l-1,r+1
while i<j:
i+=1
j-=1
while nums[i]<x: i+=1
while nums[j]>x: j-=1
if i<j: nums[i],nums[j]=nums[j],nums[i]
# 以相同方法继续排序支点左右两边元素
quick_sort(nums,l,j)
quick_sort(nums,j+1,r)
quick_sort(nums,0,n-1)
print(' '.join(map(str,nums)))
归并排序
n = int(input())
nums = list(map(int,input().split()))
def merge_sort(nums,l,r):
# 若区间只有一个数或者没有数,则不需要排序
if l>=r:
return
# 确定分界点为中点
mid = (l+r)//2
# 递归排序
merge_sort(nums,l,mid) # 递归排序左边
merge_sort(nums,mid+1,r) # 递归排序右边
# 归并——合二为一
tmp,i,j = [],l,mid+1 #tmp存储排序后的序列;指针i指向左边序列的起点;指针j指向右边序列的起点
# 左边序列和右边序列都没结束循环时
while i<=mid and j<=r:
if nums[i]<nums[j]: # 同时比较两个左右两边序列,哪个数小就放进tmp中
tmp.append(nums[i])
i+=1
else:
tmp.append(nums[j])
j+=1
# 左右两边序列有一边没有循环完另一边就结束了,则把剩余的数直接接到答案数组中(即tmp)
if i<=mid: tmp+=nums[i:mid+1]
if j<=r: tmp+=nums[j:r+1]
nums[l:r+1] = tmp[:]
merge_sort(nums,0,n-1)
print(" ".join(map(str,nums)))