排序low B 三人组:冒泡、选择、插入
排序牛逼三人组: 快速排序、堆排序、归并排序
其他排序:希尔排序、计算排序、基础排序
1、冒泡排序
def pubble_sort(li):
for i in range(len(li)-1):
exchange=0 #优化,如果已经排好序了,就终止
for j in range(len(li)-1-i):
if li[j]>li[j+1]:
li[j],li[j+1]=li[j+1],li[j]
exchange=1
if exchange == 0:
return li
return li
li=[10,9,6,8,5,7]
print(pubble_sort(li))
2、选择法 从数据中选择最小的同第一个值交换,在从剩下的部分中选择最小的与第二个交换,这样往复下去
def select_sort(li):
for i in range(len(li)-1):
min_loc=i
for j in range(i+1,len(li)):
if li[j] < li[min_loc]:
min_loc=j
if min_loc != i:
li[i],li[min_loc]=li[min_loc],li[i]
return li
3、交换法 每次用当前的元素一一的同其后的元素,比较并交换
def swap_sort(li):
for i in range(len(li)-1):
for j in range(i+1,len(li)):
if li[j] < li[i]:
li[i],li[j]=li[j],li[i]
return li
4、插入排序,在前面的数中寻找相应的位置插入,然后继续下一张 ,插入排序就是每一步都将一个待排数据按其大小插入到已经排序的数据中的适当位置,直到全部插入完毕
def insert_sort(li):
for i in range(1,len(li)):
tmp=li[i]
j = i-1
while j>=0 and tmp<li[j]:
li[j+1]=li[j]
j=j-1
li[j+1]=tmp
return li
li=[10,9,6,8,5,7]
print(insert_sort(li))
5、快速排序:
该方法的基本思想是:
#1.先从数列中取出一个数作为基准数。
#2.分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边。
#3.再对左右区间重复第二步,直到各区间只有一个数。
def partition(li,left,right):
tmp=li[left]
while left < right:
while left<right and li[right]>=tmp:
right=right-1
li[left]=li[right]
while left<right and li[left]<=tmp:
left=left+1
li[right]=li[left]
li[left]=tmp
return left
def quick_sort(li,left,right):
if left<right:
mid=partition(li,left,right)
quick_sort(li,left,mid-1)
quick_sort(li,mid+1,right)
li=[10,3,5,1,8,6]
quick_sort(li,0,len(li)-1)
print(li)