'''排序算法的实现'''
import random
def bubble_sort(L):
'''冒泡排序的实现
O(n**2)
稳定算法
'''
for i in range(len(L)):
for j in range(len(L) - i - 1):
if L[j] > L[j + 1]:
L[j], L[j + 1] = L[j + 1], L[j]
return L
def insert_sort(L):
'''插入排序
O(n**2)
稳定
'''
count = len(L)
for i in range(1, count):
key = L[i]
j = i - 1
while j >= 0:
if L[j] > key:
L[j + 1] = L[j]
L[j] = key
else:
break
j -= 1
return L
def quick_sort(L):
'''快速排序
O(nlogn)
不稳定
'''
if len(L) < 2:
return L
key = L[0]
lt = [x for x in L[1:] if x <= key]
gt = [x for x in L[1:] if x > key]
return quick_sort(lt) + [key] + quick_sort(gt)
def choice_sort(L):
'''选择排序
O(n**2)
不稳定
'''
count = len(L)
for i in range(count):
min = i
for j in range(i + 1, count):
if L[j] < L[min]:
min = j
L[i], L[min] = L[min], L[i]
return L
def shell_sort(L):
"""希尔排序
O(n**2)
不稳定
"""
n = len(L)
gap = n // 2
while gap > 0:
for i in range(gap, n):
while i > 0:
if L[i - gap] > L[i]:
L[i], L[i - gap] = L[i - gap], L[i]
i -= gap
else:
break
gap //= 2
return L
def merge_sort(L):
'''归并排序
O(nlongn)
稳定
'''
# 以下是归并过程中分解的过程
n = len(L) // 2
if n <= 1:
return L
left = merge_sort(L[:n])
right = merge_sort(L[n:])
# 以下是归并算法中的合并的过程
result = []
i, j = 0, 0
while i < len(left) and j < len(right):
if left[i] < right[j]:
result.append(left[i])
i += 1
else:
result.append(right[j])
j += 1
# 循环退出,将left和right中剩下的元素放入到列表中
result += left[i:]
result += right[j:]
return result
if __name__ == '__main__':
L = [x for x in map(lambda x:random.randrange(50), range(10))]
print('原始列表: ', L)
bubble_sort(L)
print('冒泡排序: ', L)
insert_sort(L)
print('插入排序: ', L)
print('快速排序: ', quick_sort(L))
choice_sort(L)
print('选择排序: ', L)
shell_sort(L)
print('希尔排序: ', L)
print('归并排序: ', merge_sort(L))
算法和数据结构的应用('''排序算法的实现''')
猜你喜欢
转载自blog.csdn.net/hanyuyang19940104/article/details/80264603
今日推荐
周排行