归并排序
def sort(array, l, r):
if l == r:
return
mid = (l + r) // 2
sort(array, l, mid)
sort(array, mid + 1, r)
merge(array, l, mid, r)
def merge(array, l, mid, r):
tmp = []
i = l
j = mid + 1
while i <= mid and j <= r:
if array[i] <= array[j]:
tmp.append(array[i])
i += 1
else:
tmp.append(array[j])
j += 1
while i <= mid:
tmp.append(array[i])
i += 1
while j <= r:
tmp.append(array[j])
j += 1
for i in range(len(tmp)):
array[l + i] = tmp[i]
冒泡排序
nums = [3,1,5,0,8,6]
n = len(nums)
for i in range(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)
插入排序
nums = [3,1,5,0,8,6]
n = len(nums)
for i in range(1, n):
cur = nums[i]
j = i - 1
while j >= 0:
if nums[j] > cur:
nums[j+1] = nums[j] # 往后移一位
else:
break
j -= 1
nums[j+1] = cur
print(nums)
快速排序
nums = [3,1,5,0,8,6]
n = len(nums)
def quick_sort(array, l, r):
if l >= r:
return
i = l
j = r
pivot = array[l]
while i < j:
while j > i and array[j] >= pivot:
j -= 1
if j > i:
nums[i] = nums[j]
i += 1
while i < j and array[i] <= pivot:
i += 1
if j > i:
nums[j] = nums[i]
j -= 1
nums[i] = pivot
quick_sort(array, l, i-1)
quick_sort(array, i+1, r)
quick_sort(nums, 0, n-1)
print(nums)
选择排序
nums = [3,1,5,0,8,6]
n = len(nums)
for i in range(n-1):
cur = i
for j in range(i+1, n): # 找后面的最小的元素
if nums[j] < nums[cur]:
cur = j
nums[cur], nums[i] = nums[i], nums[cur]
print(nums)