[Python]常用排序算法

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
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值