class Sort_Algorithm(object):
# 快速排序(Quicksort)
def quick_sort(self,nums,left,right):
if left+1>=right:
return
first=left;last=right-1;key=nums[first]
while first<last:
while first<last and nums[last]>=key:
last-=1
nums[first]=nums[last]
while first<last and nums[first]<=key:
first+=1
nums[last]=nums[first]
nums[first]=key
self.quick_sort(nums,left,first)
self.quick_sort(nums,first+1,right)
return nums
# 归并排序(Merge Sort)
def merge_sort(self,nums,left,right,temp):
if left+1>=right:
return
mid=left+(right-left)//2
self.merge_sort(nums,left,mid,temp)
self.merge_sort(nums,mid,right,temp)
p=left;q=mid;i=left
while p<mid or q<right:
if q>=right or (p<mid and nums[p]<=nums[q]):
temp[i]=nums[p]
i+=1;p+=1
else:
temp[i]=nums[q]
i+=1;q+=1
for i in range(left,right):
nums[i]=temp[i]
i+=1
return nums
# 插入排序(Insertion Sort)
def insertion_sort(self,nums,n):
for i in range(n):
j=i
while j>0 and nums[j]<nums[j-1]:
nums[j],nums[j-1]=nums[j-1],nums[j]
j-=1
return nums
# 冒泡排序(Bubble Sort)
def bubble_sort(self,nums,n):
for i in range(1,n):
swapper=False
for j in range(1,n-i+1):
if nums[j]<nums[j-1]:
nums[j],nums[j-1]=nums[j-1],nums[j]
swapper=True
if not swapper:
break
return nums
# 选择排序(Selection Sort)
def selection_sort(self,nums,n):
for i in range(n-1):
mid=i
j=i+1
while j<n:
if nums[j]<nums[mid]:
mid=j
j+=1
nums[mid],nums[i]=nums[i],nums[mid]
return nums
nums=[1,3,5,7,2,6,4,8,9,2,8,7,6,0,3,5,9,4,1,0]
temp=(len(nums))*[0]
S=Sort_Algorithm()
print("快速排序:",S.quick_sort(nums,0,len(nums)))
print("归并排序:",S.merge_sort(nums,0,len(nums),temp))
print("插入排序:",S.insertion_sort(nums,len(nums)))
print("冒泡排序:",S.bubble_sort(nums,len(nums)))
print("选择排序:",S.selection_sort(nums,len(nums)))
输出结果:
[0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9]
结合如下的网站学习,效果会更好
https://pythontutor.com/
https://visualgo.net/en