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)

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐