1.冒泡排序
import random
def bubbleSort(a):
length=len(a)
for i in range(length-1):
for j in range(length-i-1):
if a[j] > a[j+1]:
a[j], a[j + 1] = a[j + 1], a[j] #自动拆包
print("第",i,"轮第",j,"次",a)
a=list(range(6))
random.shuffle(a) #打乱顺序
print('原始值:',a)
bubbleSort(a)
print('排序后结果:',a)
结果展示:
2.选择排序
#选择排序
#在arr中从start开始查一个最大值的索引号
def findMaxIndex(arr,start):
maxIndex=start
j=start+1
length=len(arr)
while(j<length):
if arr[j]>arr[maxIndex]:
maxIndex=j
print("第",j,"次查找的结果:",maxIndex)
j+=1
return maxIndex
def selectSort(arr):
length=len(arr)
for i in range(length-1):
print("第",i,"轮排序")
maxIndex=findMaxIndex(arr,i)
arr[maxIndex],arr[i]=arr[i],arr[maxIndex]
print("排序后的结果:",arr)
a=list(range(6))
random.shuffle(a) #打乱顺序
print('原始值:',a)
selectSort(a)
结果展示:
3.插入排序
import random
def insertSort(arr):
i=1
length=len(arr)
while(i<length):
nextItem=arr[i]
j=i
print("第",i,"轮排序")
while(j>0 and arr[j-1]<nextItem):
print("第",i,"轮排序中找到要插入的位置:",j)
arr[j]=arr[j-1]
j-=1
arr[j]=nextItem #将nextItem插入到合适的位置
print("第",i,"轮排序后的数组:",arr)
i+=1
print('排序后的结果:',arr)
a=list(range(6))
random.shuffle(a) #打乱顺序
print('原始值:',a)
insertSort(a)
4.希尔排序
def shellSort(arr):
gap=int(len(arr)/2) #增量
while gap>0:
print("每轮开始的数组",arr)
print("增量为:",gap)
insertSort(arr,gap)
print("增量为",gap,"时排好序的数组:",arr)
gap=int(gap/2) #
return arr
def insertSort(arr,gap):
i=gap
length=len(arr)
while(i<length):
nextItem=arr[i]
j=i
print("第",i,"轮排序")
while(j>=gap and arr[j-gap]<nextItem):
print("第",i,"轮排序中找到要插入的位置:",j)
arr[j]=arr[j-gap]
j=j-gap
arr[j]=nextItem #将nextItem插入到合适的位置
print("第",i,"轮排序后的数组:",arr)
i+=1
a=list(range(6))
random.shuffle(a) #打乱顺序
print('原始值:',a)
print("排序后的结果:",shellSort(a))
5.归并排序
# 如何合并两个有序的数值
import random
import math
def merge_sort(arr):
if len(arr) <= 1 :
return arr
#num = int(len(arr)/2) #二分分解
num=math.trunc(len(arr)/2)
left = merge_sort(arr[:num])
right = merge_sort(arr[num:])
print('拆分的左排序数组:',left)
print('拆分的右排序数组:',right)
return merge(left,right) #合并数组
def merge(a,b):
h=j = 0 #left与right数组的下标指针
c = []
while j<len(a) and h<len(b):
if a[j] < b[h]:
c.append(a[j])
j += 1
else:
c.append(b[h])
h += 1
if j == len(a):
for i in b[h:]:
c.append(i)
else:
for i in a[j:]:
c.append(i)
print('将a',a,'与b','合并排序后:',c)
return c
a=list(range(6))
random.shuffle(a) #打乱顺序
print('原始值:',a)
print("排序后的结果:",merge_sort(a))
6.快速排序
'''
步骤:
从数列中挑出一个元素作为基准数。
分区过程,将比基准数大的放到右边,小于或等于它的数都放到左边。
再对左右区间递归执行第二步,直至各区间只有一个数。
'''
import random
def quickSort(arr):
if len(arr)<2:
return arr
else:
#找基值
baseValue=arr[0]
lessArray=[item for item in arr[1:] if item<baseValue]
eqArray=[item for item in arr[:] if item==baseValue]
bigArray=[item for item in arr[1:] if item>baseValue]
return quickSort(lessArray)+eqArray+quickSort(bigArray)
a=list(range(6))
random.shuffle(a) #打乱顺序
print('原始值:',a)
print("排序后的结果:",quickSort(a))
版权声明:本文为sinat_42518234原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。