首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >基础算法之排序算法

基础算法之排序算法

原创
作者头像
王脸小
修改于 2021-08-16 02:33:58
修改于 2021-08-16 02:33:58
50300
代码可运行
举报
文章被收录于专栏:王漂亮王漂亮
运行总次数:0
代码可运行

快速排序

快速排序使用分治法(Divide and conquer)策略来把一个序列(list)分为较小和较大的2个子序列,然后递归地排序两个子序列。

每次迭代,比flag大的放右边,比flag小的放左边,重点在partition上

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def quicksort(nums, l, r):
    if l < r:
        p = partition(nums, l, r)
        quicksort(nums, l, p-1)
        quicksort(nums, p+1, r)

    return nums
    
def partition(nums, l, r):
    flag = nums[l]
    i, j = l + 1, r
    while True:
        #从右往左找比flag小的
        while i <= j and nums[j] >= flag:
            j -= 1
        #从左往右找比flag小的
        while i <= j and nums[i] <= flag:
            i += 1

        if i <= j:
            nums[i], nums[j] = nums[j], nums[i]
        else:
            break
    
    nums[l], nums[j] = nums[j], nums[l]

    return j

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class quicksort:
    def quicksort(self, nums, l, r):
        if l < r:
            p = self.partition(nums, l, r)
            self.quicksort(nums, l, p-1)
            self.quicksort(nums, p+1, r)

        return nums
        
    def partition(self, nums, l, r):
        flag = nums[r]
        i = l - 1
        for j in range(l, r):
            if nums[j] <= flag:
                i += 1
                nums[i], nums[j] = nums[j], nums[i]
        i += 1 
        nums[i], nums[r] = nums[r], nums[i]

        return i             

归并排序

每轮把数组等量地一分为二,直到分到只有一个数。然后再有序地合并,重点在merge上。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class mergesort:
    def mergesort(self, nums):
        if len(nums) <= 1: return nums
        mid = len(nums) // 2
        left = self.mergesort(nums[:mid])
        right = self.mergesort(nums[mid:])

        return self.merge(left, right)

    def merge(self, left, right):
        l, r = 0, 0 
        res = []
        while l < len(left) and r < len(right):
            if left[l] < right[r]:
                res.append(left[l])
                l += 1
            else:
                res.append(right[r])
                r += 1
        
        res += left[l:]
        res += right[r:]
        return res

冒泡排序

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class bubblesort:
    def bubblesort(self, nums):
        for _ in range(len(nums)):
            for j in range(len(nums)-1):
                if nums[j] > nums[j+1]:
                    nums[j], nums[j+1] = nums[j+1], nums[j]
        
        return nums

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
十大排序算法理解总结
1、时间复杂度:O(n2)O(n^2)O(n2) 2、空间复杂度:O(1)O(1)O(1) 3、稳定排序 4、原地排序
鳄鱼儿
2024/05/21
1500
面试复习-算法-排序
寻找第K大的数: https://leetcode.cn/problems/xx4gT2/
宅蓝三木
2024/10/09
560
八大排序算法Java实现(下)-快排、归排、基数排序
2)通过一趟排序讲待排序的记录分割成独立的两部分,其中一部分记录的元素值均比基准元素值小。另一部分记录的 元素值比基准值大。
JavaEdge
2022/11/30
6230
八大排序算法Java实现(下)-快排、归排、基数排序
Python笔记:排序算法整理
前两天做每日一题遇到了一道排序题,想想自从用了python之后貌似就几乎再没有自己实现过排序算法了。
codename_cys
2021/03/25
3620
Sort Algorithm排序算法
第一次迭代,寻找0到6个下标的数字哪个是最小的,找到最小的就和第一个交换,也就是2。第一次遍历所有
西红柿炒鸡蛋
2018/09/07
1.2K0
使用ChatGPT生成了十种排序算法
当前ChatGPT非常火爆,对于程序员来说,ChatGPT可以帮助编写很多有用的代码。比如:在算法的实现上,就可以替我们省很多事。所以,小试牛刀一下,看看ChatGPT生成了排序算法怎么样?
KunkkaWu
2023/04/23
8740
使用ChatGPT生成了十种排序算法
【JS】250- 十大排序的算法思路和代码实现
本文内容包括:(双向)冒泡排序、选择排序、插入排序、快速排序(填坑和交换)、归并排序、桶排序、基数排序、计数排序(优化)、堆排序、希尔排序。大家可以在这里测试代码。更多 leetcode 的 JavaScript 解法也可以在我的算法仓库中找到,欢迎查看~
pingan8787
2019/07/25
8430
【JS】250- 十大排序的算法思路和代码实现
python实现各种排序算法
Python有自己的列表排序方法,就是sorted函数和sort()函数,区别是:sorted函数返回一个有序的序列副本,而sort()函数直接在当前列表进行排序,不创建副本,故sort()函数返回None。一般来说,返回None表示是在 原对象上进行操作,而返回排序的结果则表示创建了一个副本。
用户7886150
2021/01/16
3980
一文读懂如何用 Python 实现6种排序算法
总结了一下常见集中排序的算法 归并排序 归并排序也称合并排序,是分治法的典型应用。分治思想是将每个问题分解成个个小问题,将每个小问题解决,然后合并。 具体的归并排序就是,将一组无序数按n/2递归分解
CDA数据分析师
2018/02/05
8160
一文读懂如何用 Python 实现6种排序算法
数据结构-排序算法原理和Python实现
基本思想是每次讲一个待排序的记录,按其关键字大小插入到前面已拍好的子序列中,直到全部完成。
百川AI
2021/10/19
3370
排序算法的 Python 实现以及时间复杂度分析
我用 Python 实现了冒泡排序、选择排序、插入排序、归并排序、快速排序。然后简单讲了讲快速排序的优化,我们可以通过小数组采用插入排序来减少递归的开销;对于有一定顺序的数组,我采用三数取中来提高性能;对于包含大量重复数的数组,我用了三路快速排序来提高性能。 最后,我把这些排序算法应用在随机数组、升序数组、降序数组、包含大量重复数的数组上,比较了一下它们的耗时。
马修
2021/01/21
1.7K0
排序算法的 Python 实现以及时间复杂度分析
【php基础】php的几种排序算法的比较
这里列出了几种PHP的排序算法的时间比较的结果,,希望对大家有所帮助 /* * php 四种排序算法的时间与内置的sort排序比较 * 3000个元素,四种算法的排序所用的时间比较 * 冒泡排序 857.98192024231ms * 选择排序 903.74493598938ms * 插入排序 296.8270778656ms * 快速排序 15.607833862305ms * sort排序 0.95200538635254ms * 归并排序 14.61386680603ms * */
程序员互动联盟
2018/03/12
1.2K0
手撕代码之常用排序算法
每一步将一个待排序的记录,插入到前面已经排好序的有序序列中去,直到插完所有元素为止。
公众号guangcity
2019/09/20
6010
重学数据结构和算法(五)之归并排序、快速排序
冒泡排序、插入排序、选择排序这三种排序算法,它们的时间复杂度都是 O(n2),比较高,适合小规模数据的排序。归并排序和快速排序的时间复杂度为 O(nlogn) 。这两种排序算法适合大规模的数据排序
六月的雨
2021/09/26
1.4K0
重学数据结构和算法(五)之归并排序、快速排序
常见排序算法-冒泡排序、选择排序 、插入排序 、快速排序、 归并排序 、堆排序
👨‍💻个人主页: 才疏学浅的木子 🙇‍♂️ 本人也在学习阶段如若发现问题,请告知非常感谢 🙇‍♂️ 📒 本文来自专栏: 算法 🌈 算法类型:排序算法 🌈 排序算法 冒泡排序 冒泡排序的优化 选择排序 插入排序 快速排序 归并排序 堆排序 冒泡排序 平均时间复杂度: o(n^2) 最好时间: o(n) 最坏时间: o(n^2) 空间复杂度: o(1) 是否稳定: 稳定 简单的冒泡排序 public int[] bubbleSort(int [] nums){
才疏学浅的木子
2022/11/20
1K0
常见排序算法-冒泡排序、选择排序 、插入排序 、快速排序、 归并排序 、堆排序
JavaScript算法-排序算法
对计算机中存储的数据执行的两种最常见操作是排序和索引。下述阐述的排序方式,暂且都是用数组进行测试(从小到大)。
奋飛
2021/08/30
5250
JavaScript算法-排序算法
一文读懂如何用 Python 实现6种排序算法
总结了一下常见集中排序的算法 归并排序 归并排序也称合并排序,是分治法的典型应用。分治思想是将每个问题分解成个个小问题,将每个小问题解决,然后合并。 具体的归并排序就是,将一组无序数按n/2递归分解成
CDA数据分析师
2018/02/05
1K0
一文读懂如何用 Python 实现6种排序算法
十大经典排序算法最强总结(含Java、Python码实现)
所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。排序算法,就是如何使得记录按照要求排列的方法。排序算法在很多领域得到相当地重视,尤其是在大量数据的处理方面。一个优秀的算法可以节省大量的资源。在各个领域中考虑到数据的各种限制和规范,要得到一个符合实际的优秀算法,得经过大量的推理和分析。
10JQKA
2020/12/31
1.1K0
十大排序算法总结(Python3实现)
排序算法大概是hello world之后最经典的编程题目了,但这并不意味着简单如hello world一样的输入输出。排序的各种解决方法涵盖了几乎所有基本的算法思想,你可以在任意一本算法分析与设计的书籍中轻易找到排序算法的例子;同时,熟练掌握各种排序算法可以加深对各种数据结构的理解与运用,对编程能力也会起到很好的锻炼效果。
py3study
2020/01/12
5830
排序算法总结
排序算法作为最经典的算法知识,可以说是每个程序员都必须得掌握的了。文本主要对常见的几种排序算法进行介绍。
EmoryHuang
2022/09/26
2760
排序算法总结
相关推荐
十大排序算法理解总结
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验