python版本排序苏算法,抽空先撸了下冒泡排序,选择排序,插入排序,归并排序,快排排序,后续补全堆排序,基数和计数排序 `
def maopao_sort(nums: List[int]):
n = len(nums)
for i in range(n):
flag = False
for j in range(1, n-i):
if nums[j-1] > nums[j]:
nums[j], nums[j-1] = nums[j-1], nums[j]
flag = True
if not flag:
return
return
def select_sort(nums:List[int]):
n = len(nums)
for i in range(n):
min = i
for j in range(i+1, n):
if nums[i] > nums[j]:
min = j
if min != i:
nums[i], nums[min] = nums[min], nums[i]
def insert_sort(nums:List[int]):
n = len(nums)
for i in range(1, n):
temp = nums[i]
index = i
for j in range(i-1, -1, -1):
if nums[j] > temp:
nums[j+1] = nums[j]
else:
index = j+1
break
nums[index] = temp
def merge_sort(nums:List[int]):
n = len(nums)
if n <= 1:
return
def merge(a, b):
result = []
m = len(a)
n = len(b)
i,j = 0, 0
while i < m and j < n:
if a[i] <= b[j]:
result.append(a[i])
i += 1
else:
result.append(b[j])
j += 1
if i < m:
result.extend(a[i:])
if j < n:
result.extend(b[j:])
return result
def merge_sort_s(start, end):
if start == end:
return [nums[start]]
mid = (start + end)//2
a1 = merge_sort_s(start, mid)
b1 = merge_sort_s(mid+1, end)
return merge(a1, b1)
return merge_sort_s(0, n-1)
def quick_sort(nums:List[int]):
n = len(nums)
def patition(start, end):
if start == end:
return start
qivot = nums[end]
index = start
for i in range(start, end):
if nums[i] < qivot:
nums[i],nums[index] = nums[index], nums[i]
index += 1
nums[index], nums[end] = nums[end],nums[index]
return index
def quick(start, end):
if start >= end:
return
p = patition(start, end)
quick(start, p-1)
quick(p+1, end)
quick(0, n-1)
`