冒泡排序
def sort(alist):
for j in range(len(alist)-1):
for i in range(len(alist)-1-j):
if alist[i] > alist[i+1]:
alist[i], alist[i+1] = alist[i+1], alist[i]
return alist
选择排序
def sort(alist):
max_index = 0
for j in range(len(alist)-1):
for i in range(len(alist)-1-j):
if alist[max_index] < alist[i]:
max_index = i
alist[max_index], alist[len(alist)-1-j] = alist[len(alist)-1-j], alist[max_index]
return alist
插入排序
def sort(alist):
for i in range(1, len(alist)):
while i > 0:
if alist[i] < alist[i-1]:
alist[i], alist[i-1] = alist[i-1], alist[i]
i -= 1
else:
break
return alist
插入排序的进阶(希尔排序)
def sort(alist):
gap = len(alist) // 2
while gap >= 1:
for i in range(gap, len(alist)):
while i > 0:
if alist[i] < alist[i - gap]:
alist[i], alist[i - gap] = alist[i - gap], alist[i]
i -= gap
else:
break
gap //= 2
return alist
原理:
快速排序
- 将列表中第一个元素设定为基准数字,赋值给mid变量,然后将整个列表中比基准小的数值放在基准的左侧,比基准到的数字放在基准右侧。然后将基准数字左右两侧的序列在根据此方法进行排放。
- 定义两个指针,low指向最左侧,high指向最右侧
- 然后对最右侧指针进行向左移动,移动法则是,如果指针指向的数值比基准小,则将指针指向的数字移动到基准数字原始的位置,否则继续移动指针。
- 如果最右侧指针指向的数值移动到基准位置时,开始移动最左侧指针,将其向右移动,如果该指针指向的数值大于基准则将该数值移动到最右侧指针指向的位置,然后停止移动。
- 如果左右侧指针重复则,将基准放入左右指针重复的位置,则基准左侧为比其小的数值,右侧为比其大的数值。
def sort(alist,start,end): #[6,1,2,7,9,3,4,5,10,8]
low = start
high = end
while low > high:
return
mid = alist[start]
while low < high:
while low < high:
if alist[high] < mid:
alist[low] = alist[high]
break
else:
high -= 1
while low < high:
if alist[low] > mid:
alist[high] = alist[low]
break
else:
low += 1
if low == high:
alist[low] = mid
break
sort(alist, start, high-1) // 这里的high和low一样,都是中间位置的index
sort(alist, high+1, end) // 这里的high和low一样,都是中间位置的index
return alist
alist = [6,1,2,7,9,3,4,5,10,8]
print(sort(alist, 0, len(alist)-1))