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

Logo

GitCode 天启AI是一款由 GitCode 团队打造的智能助手,基于先进的LLM(大语言模型)与多智能体 Agent 技术构建,致力于为用户提供高效、智能、多模态的创作与开发支持。它不仅支持自然语言对话,还具备处理文件、生成 PPT、撰写分析报告、开发 Web 应用等多项能力,真正做到“一句话,让 Al帮你完成复杂任务”。

更多推荐