冒泡排序
[10,6,27,9,15,38,49,20]
原理
第一次排序:
[10,6,27,9,15,38,49,20]
[6,10,27,9,15,38,49,20]
[6,10,27,9,15,38,49,20]
[6,10,9,27,15,38,49,20]
[6,10,9,15,27,38,49,20]
[6,10,9,15,27,38,49,20]
[6,10,9,15,27,38,49,20]
[6,10,9,15,27,38,20,49]
第二次排序:
[6,10,9,15,27,38,20,49]
[6,10,9,15,27,38,20,49]
[6,9,10,15,27,38,20,49]
[6,9,10,15,27,38,20,49]
[6,9,10,15,27,38,20,49]
[6,9,10,15,27,38,20,49]
[6,9,10,15,27,20,38,49]
第三次排序:
[6,9,10,15,27,20,38,49]
[6,9,10,15,27,20,38,49]
[6,9,10,15,27,20,38,49]
[6,9,10,15,27,20,38,49]
[6,9,10,15,27,20,38,49]
[6,9,10,15,20,27,38,49]
第四次排序:
[6,9,10,15,20,27,38,49]
[6,9,10,15,20,27,38,49]
[6,9,10,15,20,27,38,49]
[6,9,10,15,20,27,38,49]
[6,9,10,15,20,27,38,49]
第五次排序:
[6,9,10,15,20,27,38,49]
[6,9,10,15,20,27,38,49]
[6,9,10,15,20,27,38,49]
[6,9,10,15,20,27,38,49]
第六次排序:
[6,9,10,15,20,27,38,49]
[6,9,10,15,20,27,38,49]
[6,9,10,15,20,27,38,49]
第七次排序:
[6,9,10,15,20,27,38,49]
[6,9,10,15,20,27,38,49]
第八次排序:
[6,9,10,15,20,27,38,49]
代码实现
def bubbleSort(lis):
for i in range(0,len(lis)):
for j in range(0,len(lis)-1-i):
if(lis[j]>lis[j+1]):
lis[j],lis[j+1]=lis[j+1],lis[j]
return lis
插入排序
原理
[10,6,27,9,15,38,49,20]
[10,6,27,9,15,38,49,20]
[6,10,27,9,15,38,49,20]
[6,10,27,9,15,38,49,20]
[6,9,10,27,15,38,49,20]
[6,9,10,15,27,38,49,20]
[6,9,10,15,27,38,49,20]
[6,9,10,15,27,38,49,20]
[6,9,10,15,20,27,38,49]
代码实现
def insertSort(lis):
for i in range(1,len(lis)):
for j in range(0,i):
if(lis[i]<lis[j]):
lis.insert(j,lis[i])
lis.pop(i+1)
break
return lis
快速排序
原理
[10,6,27,9,15,38,49,20]
[10,6,27,9,15,38,49,20]
[6,9,10,27,15,38,49,20]
[6,9,10,15,20,27,38,49]
[6,9,10,15,20,27,38,49]
代码实现
def quickSort(lis):
if(len(lis)>1):
mid=lis[0]
left=[]
right=[]
lis.remove(mid)
for num in lis:
if num<=mid:
left.append(num)
else:
right.append(num)
return quickSort(left)+[mid]+quickSort(right)
else:
return lis
希尔排序
原理
[10,6,27,9,15,38,49,20]
[10,6,27,9,15,38,49,20]
步长为4:
[10,15] [6,38] [27,49] [9,20]
[10,6,27,9,15,38,49,20]
步长为2:
[10,27,15,49][6,9,38,20]
[10,15,27,49][6,9,20,38]
[10,6,15,9,27,20,49,38]
步长为1:
[6,9,10,15,20,27,38,49]
代码实现
def shellSort(lis):
gap=len(lis)//2
while gap>0:
for i in range(gap,len(lis)):
j=i
while j>=0 and lis[j-gap]>lis[j]:
lis[j-gap],lis[j]=lis[j],lis[j-gap]
j=j-gap
gap=gap//2
return lis
选择排序
原理
[10,6,27,9,15,38,49,20]
[6,10,27,9,15,38,49,20]
[6,9,10,27,15,38,49,20]
[6,9,10,27,15,38,49,20]
[6,9,10,15,27,38,49,20]
[6,9,10,15,20,27,38,49]
[6,9,10,15,20,27,38,49]
[6,9,10,15,20,27,38,49]
[6,9,10,15,20,27,38,49]
代码实现
def selectSort(lis):
i=0
while i<len(lis)-1:
minnum=lis[i]
for j in range(i,len(lis)):
if lis[j]<=minnum:
minnum=lis[j]
lis.remove(minnum)
lis.insert(i,minnum)
i+=1
return lis