栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

【力扣Leetcode】排序专题(Python刷题):插入、选择、冒泡、快速、归并、堆排、希尔、计数、桶排、基数。

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【力扣Leetcode】排序专题(Python刷题):插入、选择、冒泡、快速、归并、堆排、希尔、计数、桶排、基数。

leetcode刷题,python实现排序,持续更新……(先写个大纲,后续刷题后更新)

基本排序模板:

复杂度O(n^2):插入排序,选择排序,冒泡排序

复杂度O(nlogn):快速排序,归并排序,堆排序

其它:希尔排序,计数排序,桶排序,基数排序

题目:242,912,56,179,215,75,969

剑指 Offer Ⅱ:075,077,

面试题:10.01,10.09,16.16

剑指 Offer:51

目录

复杂度O(n^2):插入排序,选择排序,冒泡排序

复杂度O(nlogn):快速排序,归并排序,堆排序


复杂度O(n^2):插入排序,选择排序,冒泡排序

选择排序:从无序区选择比i更小的值与i交换。→每趟选择出当前最小值放在前面。

class Solution:
    def select_sort(self, nums: List[int]) -> List[int]:
        for i in range(len(nums)-1):       # 无序区第一个值与其余值比较,更小的放在无序区第一位
            for j in range(i+1,len(nums)): # 一共需要n-1趟,每次在列表最前面排出最小值
                if nums[j] 

冒泡排序:相邻两值比较,更大的值放在后面的位置,对于每个i,选取当前最大的值放在无序区的最后一个位置。一共比较n-1趟,每趟比较n-1-i次。

class Solution:
    def buble_sort(self, nums: List[int]) -> List[int]:
        for i in range(len(nums)-1):       # 每轮选取无序区最大的值放在最后面
            for j in range(len(nums)-1-i): # 相邻两值比较,更大的放在后面
                if nums[j]>nxums[j+1]:
                    nums[j],nums[j+1]=nums[j+1],nums[j]
        return nums

冒泡排序改进:当剩余数据已经是有序的时候(整体都是有序也有可能),即在过程中没有发生过比较大小后的交换,此时就无需在进行后面重复比较,直接返回即可。

class Solution:
    def buble_sort(self, nums: List[int]) -> List[int]:
        exchange=False
        for i in range(len(nums)-1):       # 每轮选取无序区最大的值放在最后面
            for j in range(len(nums)-1-i): # 相邻两值比较,更大的放在后面
                if nums[j]>nxums[j+1]:
                    nums[j],nums[j+1]=nums[j+1],nums[j]
                    exchange=True
            if exchange=False:
                return nums
        return nums

插入排序(打扑克抓牌,放入合适位置):每次将无序区第一个值与有序区作比较,选择合适的插入位置。从有序区最后一个值开始比较,满足条件则进行交换,不断逼近最合适的插入位置。因为在有序区域插入了一个值,所以有序区比待插入值大的值索引都后移了一位。

class Solution:
    def sortArray(self, nums: List[int]) -> List[int]:
        for i in range(1,len(nums)):
            tmp=nums[i]                 # 待插入位置的值,即无序区第一位的值
            j=i-1                       # 指针指向待插入位置左边的值,即有序区最后一位
            while tmp-1: # 待插入的值与指针位置的值作比较,更小则插入
                nums[j+1]=nums[j]
                nums[j]=tmp
                j-=1                    # 指针左移,将待插入值与更小的值作比较,不断逼近最合适的插入位置
        return nums     

复杂度O(nlogn):快速排序,归并排序,堆排序

做实验去了,明天继续……

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/876463.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号