插入排序
def insertSort(arr):
arr.insert(0, 0)
for i in range(1, len(arr)):
arr[0] = arr[i]
for j in range(i + 1):
if arr[0] < arr[i - j - 1]:
arr[i - j] = arr[i - j - 1]
else:
arr[i - j] = arr[0]
break
arr.pop(0)
# arr = [7, 6, 9 ,3, 1, 5, 2, 4]
# insertSort(arr)
# print(arr)
arr = [7, 6, 9, 3, 1, 5, 2, 4, 8]
insertSort(arr)
print(arr)
def insertSort(arr):
for i in range(1, len(arr)):
temp = arr[i]
j = i - 1
while j >= 0 and temp < arr[j]:
arr[j + 1] = arr[j]
arr[j] = temp
j -= 1
# for j in range(i - 1, -1, -1):
# if temp < arr[j]:
# arr[j + 1] = arr[j]
# arr[j] = temp
# else:
# break
arr = [7, 6, 9, 3, 1, 5, 2, 4, 8]
insertSort(arr)
print(arr)
希尔排序
def shellSort(arr):
originalLength = len(arr)
length = len(arr) // 2
while length > 0:
for i in range(length):
for j in range(originalLength // length):
temp = arr[j * length]
for k in range(j):
if temp < arr[(j - k - 1) * length]:
arr[(j - k) * length] = arr[(j - k - 1) * length]
if (j - k - 1) * length == 0:
arr[(j - k - 1)] = temp
else:
arr[(j - k) * length] = temp
break
length //= 2
# arr = [7, 6, 9, 3, 1, 5, 2, 4]
# shellSort(arr)
# print(arr)
arr = [7, 6, 9, 3, 1, 5, 2, 4, 8]
shellSort(arr)
print(arr)
# Knuth序列法
def shellSort(arr):
length = len(arr)
h = 1
while h <= len(arr) / 3:
h *= 3 + 1
gap = h
while gap > 0:
for i in range(gap):
for j in range(length // gap):
temp = arr[j * gap]
k = (j - 1) * gap
while k >= 0 and temp < arr[k * gap]:
arr[(k + 1) * gap] = arr[k * gap]
arr[k * gap] = temp
k -= gap
gap = (gap - 1) // 3
arr = [7, 6, 9, 3, 1, 5, 2, 4, 8, 2, 10]
shellSort(arr)
print(arr)