#-*-coding:utf8-*-
#@Time: 2019-10-11 14:02
#@File: Sort.py
#@SoftWare:PyCharm
#@Mac
class recoder:
def __init__(self, key, datum):
self.key = key
self.datum = datum
#插入排序
def insert_sort(lst):
for i in range(1, len(lst)):
x = lst[i]
j = i
while j > 0 and lst[j-1] > x:
lst[j] = lst[j-1]
j -= 1
lst[j] = x
return lst
#选择排序
def select_sort(lst):
for i in range(len(lst)): #只需循环len(lst)-1次
k = i
for j in range(i, len(lst)):
if lst[j] < lst[k]: #k是已知最小元素的位置
k = j
if i != k:
lst[i], lst[k] = lst[k], lst[i]
return lst
#冒泡排序
def bubble_sort(lst):
for i in range(len(lst)):
found = False
for j in range(1, len(lst)-i): #i次有最后i个元素排序到最后,所以可以循环前len(lst)-i个元素。
if lst[j-1] > lst[j]:
lst[j-1], lst[j] = lst[j], lst[j-1]
found = True
if not found:
break
return lst
#快速排序
def quick_sort(lst):
quick_rec(lst,0,len(lst)-1)
return lst
def quick_rec(lst,l,r):
if l > r: return
i = l
j = r
pivot = lst[i] #为初始空位
while i < j: #找pivot的最终位置
while i < j and lst[j] >= pivot:
j -= 1
if i < j:
lst[i] = lst[j]
i += 1
while i < j and lst[i] <= pivot:
i += 1
if i < j:
lst[j] = lst[i]
j -= 1
lst[i] = pivot #将pivot存入其最终的位置
quick_rec(lst,1,i-1)#处理左半区间
quick_rec(lst,i+1,r)#处理右半区间
#快速排序
def quick_sort1(lst):
def qsort(lst,begin,end):
if begin >= end:
return
pviot = lst[begin]
i = begin
for j in range(begin+1, end+1):
if lst[j] < pviot: #发现一个小元素
i += 1
lst[i], lst[j] = lst[j], lst[i]
lst[begin], lst[i] = lst[i], lst[begin]
qsort(lst, begin, i-1)
qsort(lst, i+1, end)
qsort(lst,0,len(lst)-1)
return lst
#归并
def merge(lfrom, lto, low, mid, high):
i, j, k = low, mid, high
while i < mid and j < high:
lto[k] = lfrom[i]
i += 1
#未完待续
#大顶堆
#哈希
l = [30,13,25,16,47,26,19,10]
# print(insert_sort(l))
print(quick_sort(l))
2、插入-选择-冒泡-快速-排序
最新推荐文章于 2023-12-05 10:26:22 发布