一、直接插入排序
代码如下(示例):
#直接插入排序
def insertsort(a):
for i in range(len(a)-1):
if a[i+1]<a[i]:
#print(a)
index=i #要点:在j变化时,i也要跟着变(因为涉及元素交换),因此不能直接用i进行循环
for j in range(index,-1,-1): #在已排好序的序列中找寻它应该在的位置
if a[i+1]<a[j]:
a[i+1],a[j]=a[j],a[i+1]
i=i-1 #同上
print(a,'\n')
return a
a=[43,15,36,85,24,45,67,90]
insertsort(a)
二、冒泡排序
代码如下(示例):
#冒泡排序
def bubblesort(a):
for i in range(len(a)): #可以理解为排好序的子序列长度
for j in range(len(a)-1,i,-1): #从最后遍历
if a[j]<a[j-1]:
a[j],a[j-1]=a[j-1],a[j]
return a
a=[43,15,36,85,24,45,67,90]
bubblesort(a)
三、简单选择排序
代码如下(示例):
#简单选择排序
def selectsort(a):
for i in range(len(a)):
amin=i
#print(i,a)
for j in range(i,len(a)):
if a[j]<a[amin]:
amin=j #选出最小值,注意需要记录的是索引,不是直接记录最小值,不然交换会没有意义
a[i],a[amin]=a[amin],a[i]
return a
a=[43,15,36,85,24,45,67,90]
selectsort(a)
四、快速排序
代码如下(示例):
#快速排序
def findpivot(a,i,j):#i,j表示子序列最左和最右的下标,三值选中法
#print(a)
m=int((i+j)/2)
if a[i]>a[j]:
a[i],a[j]=a[j],a[i]
if a[j]<a[m]:
a[j],a[m]=a[m],a[j]
if a[m]<a[i]:
a[i],a[m]=a[m],a[i]
print(a[m])
return m #返回索引值
def partition(a,i,j,pivotindex): #对选出轴值的序列进行两边分配,从两边向中间遍历
print(a)
i=i+1
j=j-1
while i<j:
while(a[i]<a[pivotindex]):
i=i+1
while(a[j]>a[pivotindex]):
j=j-1
if i<j:
a[i],a[j]=a[j],a[i]
return i #现在i,j交错,i是右边序列的第一个索引
def quicksort(a,i,j):
if j<=i: #无记录或仅有一个元素
return a
pivotindex = findpivot(a,i,j)
#将轴值放在最后
a[j],a[pivotindex]=a[pivotindex],a[j]
k = partition(a,i-1,j,j) #分两段
#把轴值放回中间
a[k],a[j]=a[j],a[k]
print(a)
if(k-i>1):
quicksort(a,i,k-1)
if(j-k>1):
quicksort(a,k+1,j)
return a
a=[43,15,36,85,24,45,67,90]
quicksort(a,0,len(a)-1)