随机生成数组
def generate_arr(n):
arr = []
for i in range(n):
arr.append(random.randint(1, n))
return arr
选择排序
def select_sort(arr):
for i in range(len(arr)):
min_idx = i
for j in range(i+1,len(arr)):
if arr[min_idx] > arr[j]:
arr[min_idx],arr[j] = arr[j],arr[min_idx]
return arr
直接插入排序
def insert_sort(arr):
for i in range(len(arr)):
for j in range(i,0,-1):
if arr[j-1] > arr[j]:
arr[j],arr[j-1] = arr[j-1],arr[j]
return arr
直接插入排序优化
def insert_sort2(array):
for i in range(len(array)):
if array[i-1] > array[i]:
index,temp = i,array[i]
while index > 0 and array[index-1] > temp:
array[index] = array[index-1]
index -= 1
array[index] = temp
return array
冒泡排序优化
def bubble_sort(arr):
for i in range(len(arr)):
is_sorted = True
for j in range(len(arr)-i-1):
if arr[j] > arr[j+1]:
arr[j],arr[j+1] = arr[j+1],arr[j]
is_sorted = False
if is_sorted:
break
return arr
希尔排序
def shell_sort(arr):
n = len(arr)
gap = int(n/2)
while gap>0:
for i in range(gap,n):
j,temp = i,arr[i]
while j>=gap and arr[j-gap] > temp:
arr[j] = arr[j-gap]
j -= gap
arr[j] = temp
gap = int(gap/2)
return arr
归并排序
def merge_sort(arr):
if len(arr) == 1:
return arr
mid = len(arr)//2
left = arr[:mid]
right = arr[mid:]
ll = merge_sort(left)
rr = merge_sort(right)
return merge(ll,rr)
归并辅助
def merge(left,right):
sorted_arr = []
while len(left)>0 and len(right)>0:
if left[0] <= right[0]:
sorted_arr.append(left.pop(0))
else:
sorted_arr.append(right.pop(0))
sorted_arr += left
sorted_arr += right
return sorted_arr
附上几个算法的性能测试
用随机生成数组的方法,数据量为10000,结果如下图所示