1.1冒泡排序(ps:比较次数较多)
a=[5,2,7,4,3,6,8,0,1,9]
for i in range(len(a)-1):
for s in range(len(a)-i-1):
if a[s] < a[s+1]:
temp=a[s]
a[s]=a[s+1]
a[s+1]=temp
print(a)
1.2冒泡排序(ps:比较次数较少)
a=[5,2,7,4,3,6,8,0,1,9]
for i in range(len(a)-1):
min=0
for s in range(len(a)-i-1):
if a[min] > a[s+1]:
min=s+1
temp=a[min]
a[min]=a[len(a)-i-1]
a[len(a)-i-1]=temp
print(a)
a=[5,2,7,4,3,6,8,0,1,9]
for i in range(len(a)-1):
min=0
for s in range(len(a)-1-i):
if a[min] > a[s+1]:
min=s+1
if a[min] != a[len(a)-1-i]:
temp=a[min]
a[min]=a[len(a)-i-1]
a[len(a)-1-i]=temp
print(a)
a=[9,2,7,4,3,6,5,8,1]
def quickScore(a,start,end):
temp=a[start]
for i in range(start+1,end):
if temp > a[i] :
temp2=a[i]
for n in reversed(range(start,i)):
a[n+1]=a[n]
a[start]=temp2
index=a.index(temp)
if index - start > 1 :
quickScore(a,start,index)
if end-1 - index > 1 :
quickScore(a,index+1,end)
quickScore(a,0,9)
print(a)
编写思想以及步骤如下:
1.要排序的数组a=[9,2,7,4,3,6,5,8,1]2.定义一个指明已完成排序的指针,point=1 while point<len(a): 3.取出 point 指明的数字 temp=a=[point] 4.定义数字插入的位置 index=-1 5.通过循环判定具体位置 for i in range(point): if temp < a[i]: index=i break 6.通过判断index是否为-1判定待插入数字是否需要插入 if index != -1: for i in reversed(range(index,point)): a[i+1]=a[i] a[index]=point point+=1 print(a)
a=[9,2,7,4,3,6,5,8,1]
bijiao=0
jiaohuan=0
point=1
while point<len(a):
temp=a[point]
index=-1
for i in range(point):
bijiao+=1
if temp<a[i]:
index=i
break
if index !=-1:
for i in reversed(range(index,point)):
a[i+1]=a[i]
jiaohuan+=1
a[index]=temp
point+=1
print(a)
print('比较次数:'+str(bijiao))
print('交换次数:'+str(jiaohuan))
3.2插入排序--希尔排序(ps:减半思想,希尔排序是在直接插入排序的基础上延伸而来)
a=[9,2,7,4,3,6,5,8,1]
bijiao=0
jiaohuan=0
dk=len(a)
while True:
dk=dk//2 #len(a)//2 两个斜杠:表示取整数
for n in range(dk):
point=dk+n
while point<len(a):
temp=a[point]
index=-1
for i in range(n,point,dk):
bijiao+=1
if temp<a[i]:
index=i
break
if index !=-1:
for i in reversed(range(index,point,dk)):
a[i+dk]=a[i]
jiaohuan+=1
a[index]=temp
point+=dk
if dk == 1:
break
print(a)
print('比较次数:'+str(bijiao))
print('交换次数:'+str(jiaohuan))