chatGTP给出的python版快速排序

2023-11-15

chatGTP给出的python版快速排序

def quick_sort(arr):
    """
    快速排序函数:对给定的数组 arr 进行原地排序
    :param arr: 待排数组
    :return: 原地排序后的数组 arr
    """
    _quick_sort_helper(arr, 0, len(arr) - 1)
    return arr

def _quick_sort_helper(arr, start, end):
    if start < end:
        # 将数组划分成两部分,并返回中间点索引 pivot_index
        pivot_index = _partition(arr, start, end)
        # 对左边部分进行递归排序
        _quick_sort_helper(arr, start, pivot_index - 1)
        # 对右边部分进行递归排序
        _quick_sort_helper(arr, pivot_index + 1, end)

def _partition(arr, start, end):
    """
    划分数组函数:按照 pivot_value 将数组划分成左右两部分,并返回 pivot_index 中间点索引
    :param arr: 待排数组
    :param start: 数组起始索引
    :param end: 数组结束索引
    :return: pivot_index 中间点索引
    """
    # 取右端点作为枢轴值 pivot_value
    pivot_value = arr[end]
    # 初始化中间点索引 pivot_index 和游标 i
    pivot_index = start
    for i in range(start, end):
        # 如果当前值小于等于 pivot_value,则交换到 pivot_index 处
        if arr[i] <= pivot_value:
            arr[i], arr[pivot_index] = arr[pivot_index], arr[i]
            # 中间点索引加一,扩大左半部分
            pivot_index += 1
    # 最后交换中间点和枢轴位置的值
    arr[pivot_index], arr[end] = arr[end], arr[pivot_index]
    # 返回中间点索引
    return pivot_index

# 测试用例
print(quick_sort([5, 3, 4, 1, 2]))  # [1, 2, 3, 4, 5]
print(quick_sort([0, 0, 0, 0]))  # [0, 0, 0, 0]
print(quick_sort([9, 8, 7, 6, 5, 4, 3, 2, 1]))  # [1, 2, 3, 4, 5, 6, 7, 8, 9]

以上是一个简单的快速排序实现程序。该程序使用递归算法实现、原地排序、选择最右端点作为基准元素(pivot),并利用双指针将待排数组分成左右两部分来进行划分和排序。在每次遍历过程中,如果当前值小于等于基准元素,就将其交换到左侧部分,并将中间点索引加一。最后再交换中间点与基准元素的位置,返回中间点索引即为划分后的位置。

测试用例包括了常见的升序、相等和逆序的情况,这些测试用例能够检测快速排序算法的性能和正确性。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

chatGTP给出的python版快速排序 的相关文章

随机推荐

  • 机器学习实战之CART

    理论 CART Classification and Regression Tree 是决策树的一种 决策树是每次以某个属性为准 将数据集划分为几个类 最终数据集中的元素都被划分到相应的类中 典型的决策树算法是ID3 ID3与CART不同之
  • 天梯赛复盘

    昨天刚比完天梯赛 以为有了大一以来的积累 可以轻轻松松国三 结果 题确实感觉不难 全是模拟题 但还是寄了 结合我朋友和我的状况 总结一下教训 一 刷题阶段 1 天梯赛的题L1 L2不难 所以我前期犯得错误就是 只刷题不找题解 这其实是不太好
  • Java 开发环境配置----JDK配置

    下载JDK 首先我们需要下载java开发工具包JDK 下载地址 Java Downloads Oracle 点击如下下载按钮 在下载页面中你需要选择接受许可 并根据自己的系统选择对应的版本 本文以 Window 64位系统为例 下载后JDK
  • 物联网--思科模拟器--简单风力发电

    参考视频入口 实验拓扑图 需要注意的是ioe7连的是d1口 ioe5连的d0 服务器配置ip 电脑 风力发电 电显示器配置ip 电脑上注册 服务器上查看 为ioe6 ioe7个设置控制的账号密码 电脑上查看控制 效果图
  • lambda中sorted排序

    准备工作 新建一个User类 使用stream排序操作 默认ASC排序 stream倒序排序操作 sorted Comparator reverseOrder 代码例子 lambda sorted排序 Test public void te
  • Linux操作系统与Shell编程

    Linux是自由 开源的操作系统 安装在计算机的硬件之上 是用来操作计算机硬件和软件资源的系统软件 一般应用于专业的web服务器上 具有以下特性 Linux注重系统的安全性 对文件访问权限有严格设定 最高权限账户为root用户 可以操作一切
  • localStorage,sessionStorage和cookie的介绍及区别

    localStorage sessionStorage和cookie的介绍及区别 1 localStorage localStorage是HTML5规范中作为持久化保存客户端数据的方案 localStorage可以用于数据缓存 日志存储等应
  • 机器学习基础(五)

    决策树 决策树是一种预测模型 它代表着对象属属性与对象值之间的一种映射关系 树中的每个节点代表一个对象 分叉路径 或者叫树枝 则代表一个属性值 决策树常用方法 分类树分析 是一种监督学习 用于预计结果可能为离散类型 回归树分析 用于预计结果
  • 在Java中response如何设置文件路径

    在 Java 中 使用 java io File 类来设置文件路径 例如 下面的代码展示了如何创建一个 File 对象 并使用它来设置文件路径 import java io File 创建一个 File 对象 表示当前目录下的 test t
  • “warning NU1701: 项目依赖包与项目框架net6.0不完全兼容“

    问题 一个Net6的Web项目 有一个警告 warning NU1701 已使用 NETFramework Version v4 6 1 NETFramework Version v4 6 2 NETFramework Version v4
  • 服务器之间如何传输数据

    有时候大家需要将一台服务器内的数据传输到另外一台设备 有很多种方法 如果两台物理机离得很近 可以通过移动硬盘传输 如果是跨地区的 有人首先通过filezilla将数据下载到windows电脑上 在通过filezilla上传到另外一台服务器
  • 小红书怎么做关键词搜索排名?哪些行业适合在小红书推广?

    小红书 是口碑营销 社群营销 笔记营销 是大众点评的电商版本 靠分享打天下的 分享就是口碑 很多人问小红书怎么做关键词搜索排名 今天就小编带你领略一下小红书的关键词排名引流秘籍 一 搞关键词布局 1 文章标题中必须要带有关键词 醒目的标题
  • LeetCode-1343. Maximum Product of Splitted Binary Tree

    Given a binary tree root Split the binary tree into two subtrees by removing 1 edge such that the product of the sums of
  • 解决windows环境下cmake无法生成Makefiles文件

    Step1 首先确保你的电脑安装了make 如何安装了MinGW可以将bin目录下的mingw32 make exe或mingw64 make exeq强制改为make exe并添加环境变量也可以 Step2 执行代码 cmake G Un
  • HTTP API网关选择之一Kong介绍

    Kong是Mashape开源的高性能高可用API网关和API服务管理层 它基于OpenResty 进行API管理 并提供了插件实现API的AOP Kong在Mashape 管理了超过15 000 个API 为200 000开发者提供了每月数
  • 四. Gateway 限流

    目录 一 限流中的基础问题 1 为什么限流及常见限流方案 2 常见限流算法 计数器限流算法 令牌桶算法 漏桶算法 3 几种基础版限流实现方案 基于redis实现限流 基于 Guava RateLimiter 实现令牌算法 二 Gateway
  • 详解POW工作量证明原理

    原文地址 来自 微信公众号 区块链大师 POW工作量证明 英文全称为Proof of Work 早在比特币出现之前就已经有人探索 常见的是利用HASH运算的复杂度进行CPU运算实现工作量确定 当然你也可以利用卷积求导 大质数分解这些复杂的运
  • 14-7 使用 css 调控样式

    1 修改前端样式 可以将 ui 文件与 css 文件进行关联 类似于 html 和 css 的关系 只不过需要注意的是 前端样式可以借助 glade 进行修改 但并没有将修改应用至程序窗口 仅仅提供了预览功能 样式修改后还需要修改后台代码应
  • DeepLabv3+

    DeepLabv3 引言 语义分割中的DCNN主要有两种结构 空间金字塔池化SPP和编码器 解码器encoder decoder SPP通过多种感受野池化不同分辨率的特征来挖掘上下文信息 Encoder decoder逐步重构空间信息来更好
  • chatGTP给出的python版快速排序

    chatGTP给出的python版快速排序 def quick sort arr 快速排序函数 对给定的数组 arr 进行原地排序 param arr 待排数组 return 原地排序后的数组 arr quick sort helper a