学习目标:
分享寒假每日刷的算法题,冲击4月蓝桥杯!!冲冲冲
快速排序板子:
n = int(input())
ls = list(map(int,input().split()))
def quicksort(left,right):
if left >= right:
return
i = left - 1; j = right + 1; x = ls[left + right >> 1]
while i < j:
while True:
i += 1
if ls[i] >= x:
break
while True:
j -= 1
if ls[j] <= x:
break
if i < j:
ls[i],ls[j] = ls[j],ls[i]
quicksort(left,j)
quicksort(j+1,right)
quicksort(0,n-1)
for i in ls:
print(i,end=" ")
或
n = int(input())
ls = list(map(int,input().split()))
def quicksort(left,right):
if left >= right:
return
i = left - 1; j = right + 1; x = ls[left + right + 1 >> 1]
while i < j:
while True:
i += 1
if ls[i] >= x:
break
while True:
j -= 1
if ls[j] <= x:
break
if i < j:
ls[i],ls[j] = ls[j],ls[i]
quicksort(left,i-1)
quicksort(i,right)
quicksort(0,n-1)
for i in ls:
print(i,end=" ")
归并排序板子:
n = int(input())
ls = list(map(int,input().split()))
tmp = [0 for i in range(n)]
def merge_sort(left,right):
if left >= right:
return
mid = left + right >> 1
merge_sort(left,mid)
merge_sort(mid+1,right)
i = left; j = mid + 1; k = 0
while i <= mid and j <= right:
if ls[i] <= ls[j]:
tmp[k] = ls[i]
k += 1
i += 1
else:
tmp[k] = ls[j]
k += 1
j += 1
while i <= mid:
tmp[k] = ls[i]
k += 1
i += 1
while j <= right:
tmp[k] = ls[j]
k += 1
j += 1
k = 0
for i in range(left,right+1):
ls[i] = tmp[k]
k += 1
merge_sort(0,n-1)
for i in ls:
print(i,end = " ")
二分板子:
while left < right: # 左边界
mid = left + right >> 1
if ls[mid] >= x:
right = mid
else:
left = mid + 1
while left < right: # 右边界
mid = left + right + 1 >> 1
if ls[mid] <= x:
left = mid
else:
right = mid - 1