快速排序、冒泡排序(python)
·
1.快速排序思路:
挖坑法思路。找一个pivot基准值,pivot=nums[left],把这个位置挖为坑,从右往左找小于pivot的值,找到就放在这个坑里,此时,坑就变成了下标j的位置。然后再从左往右找大于pivot的值,填入到坑里。坑位置又变成了i的位置。直到i==j,再把pivot填进去,然后递归排序。时间复杂度最好为O(nlogn),最差为O(n)(已经有序的情况下)
#快速排序
def quick(nums,left,right):
if left>=right:
return
pivot=nums[left]
i=left
j=right
while i<j:
while i<j and nums[j]>=pivot: #找到小于pivot的值
j-=1
nums[i]=nums[j] #放到pivot左边
while i<j and nums[i]<=pivot: #找到大于pivot的值
i+=1
nums[j]=nums[i] #放到pivot右边
nums[i]=pivot #将pivot放入
quick(nums,left,i-1) #递归排序左边
quick(nums,i+1,right) #递归排序右边
nums = [5,2,8,1,7,3]
quick(nums,0,len(nums)-1)
print(nums)
2.冒泡排序思路:
两两比较,每一轮排序都会把最大的放到最后,所以每一轮排序都需要减小边界。时间复杂度为O(n^2)
def bubble_sort(nums):
n=len(nums)
for i in range(n): #需要进行的轮数
for j in range(0,n-1-i): #因为每一轮都会排好一个最大的数,所以边界需要不断变小
if nums[j+1]<=nums[j]: #两两比较
nums[j],nums[j+1]=nums[j+1],nums[j]
nums = [5,2,8,1,7,3]
bubble_sort(nums)
print(nums)
更多推荐


所有评论(0)