选择排序
def select_sort(list):
n = len(list)
for j in range(n-1):
min = j
for i in range(j+1,n):
if list[i] < list[min]:
min = i
list[j],list[min] = list[min],list[j]
if __name__ == "__main__":
li = [242,44,65,71,982,874,26,17,35,46,88]
select_sort(li)
print(li)
插入排序:
def insert_sort(alist):
n = len(alist)
for j in range(1,n):
i = j
while i >0:
if alist[i] < alist[i-1]:
alist[i],alist[i-1] = alist[i-1],alist[i]
i -= 1
else:
break
if __name__ == "__main__":
li = [242,44,65,71,982,874,26,17,35,46,88]
print(li)
insert_sort(li)
print(li)
希尔排序:
def shell_sort(alist):
n = len(alist)
gap = n//2
while gap >0:
for j in range(gap,n):
i = j
while i > 0:
if alist[i] < alist[i -gap]:
alist[i],alist[i-gap] = alist[i-gap],alist[i]
i -= gap
else:
break
gap= gap//2
if __name__ == "__main__":
li = [242,44,65,71,982,874,26,17,35,46,88]
print(li)
shell_sort(li)
print(li)
快速排序:
def quick_sort(alist, start, end):
"""快速排序"""
# 递归的退出条件
if start >= end:
return
# 设定起始元素为要寻找位置的基准元素
mid = alist[start]
# low为序列左边的由左向右移动的游标
low = start
# high为序列右边的由右向左移动的游标
high = end
while low < high:
# 如果low与high未重合,high指向的元素不比基准元素小,则high向左移动
while low < high and alist[high] >= mid:
high -= 1
# 将high指向的元素放到low的位置上
alist[low] = alist[high]
# 如果low与high未重合,low指向的元素比基准元素小,则low向右移动
while low < high and alist[low] < mid:
low += 1
# 将low指向的元素放到high的位置上
alist[high] = alist[low]
# 退出循环后,low与high重合,此时所指位置为基准元素的正确位置
# 将基准元素放到该位置
alist[low] = mid
# 对基准元素左边的子序列进行快速排序
quick_sort(alist, start, low-1)
# 对基准元素右边的子序列进行快速排序
quick_sort(alist, low+1, end)
alist = [54,26,93,17,77,31,44,55,20]
quick_sort(alist,0,len(alist)-1)
print(alist)