首页 > 编程语言 >快速排序python实现

快速排序python实现

时间:2024-08-29 23:47:58浏览次数:11  
标签:origin arr right python 基点 pivot 排序 快速 left

def quick_sort(arr, left, right):
    origin_left = left
    origin_right = right
    pivot_data = arr[left] #枢轴上的值(基准值), 就是开始用来比较的值, 一般是随机选择一个位置, 这儿选择最左边的值
    #blank_pos = left # 最左边的值已经复制到pivot中了, 所以这块内存可以使用, 作为空缺位置 初始left指向的位置就是个可以使用的空位
    left_to_right = False #当前是否从左向右移动指针(初始最空缺在最左边, 所以从右向左遍历)
    while(left != right):
        if left_to_right:
            # 从左向右
            if arr[left] > pivot_data:
                arr[right] = arr[left]
                right -= 1
                left_to_right = False
            else:
                # 继续右移
                left += 1
        else:
            # 从右向左
            # 如果小于基准值, 放左到边去
            if arr[right] < pivot_data:
                arr[left] = arr[right]
                # right位置的值复制给了left位置, right位置可以看成空位, 后面比pivot_data大的值, 可以放到这个位置
                left += 1
                left_to_right = True
            else:
                right -= 1
    # 左右两个重叠就是基准值的位置
    arr[left] = pivot_data
    print(arr)
    if left - origin_left > 1:
        quick_sort(arr, origin_left, left - 1)
    if origin_right - left > 1:
        quick_sort(arr, left + 1, origin_right)

test_arr = [3,5,2,1,6,7,9,4]
quick_sort(test_arr, 0, len(test_arr) - 1)
print(test_arr)

1.随机一个基点, 遍历全数组, 比基点大的放左边, 比基点小的放右边. 以基点为分隔左右两边再递归调用同样处理.

2.一般以最左边为基点, 元素复制出去用作比较用, 最左边的位置就空着了, 然后从右边开始向左遍历, 比基点小的放到坑里面, 右边原来的位置就空出来了, 变成坑, 这时可以从左向右遍历, 找到比基点大的放到这个坑里面, 也叫挖坑法.

也可以新开一个一样大数组, 比基点小的放从最左边开始放, 比基点大的从右边开始放(多用内存, 直观理解)

标签:origin,arr,right,python,基点,pivot,排序,快速,left
From: https://www.cnblogs.com/barrysgy/p/18387736

相关文章

  • 使用 python 升级OTA程序
    依赖文件pymodbus==3.6.3pyserial==3.5importbinasciiimportmathimporttimeimportserialfrompymodbus.clientimportModbusSerialClientasModbusClientimportstruct##设备串口配置#port='/dev/cu.usbserial-1130'#根据实际情况修改为实际串口号#baudra......
  • Python中的“for循环”:探索其无限潜力
    引言for循环是任何Python程序员工具箱中的必备技能之一。无论是在处理数据时需要遍历数组,还是在编写Web应用时循环处理请求,亦或是进行复杂的算法实现,for循环都能派上大用场。通过掌握for循环的不同用法,我们可以更高效地解决问题,写出更加优雅且高效的代码。基础语法介绍核心概念......
  • Python中的`while`循环:探索无限可能
    引言while循环允许我们重复执行一段代码块,直到指定条件不再满足为止。这种机制非常适合处理那些不确定具体重复次数的任务场景,比如读取文件直到末尾、定时任务执行等。掌握好while循环,不仅能让你的代码更加高效、简洁,还能帮助你在面对复杂问题时找到更优的解决方案。基础语法介绍......
  • Python实现图片的拼接
    Python实现图片的拼接Python中有多种方法可以实现图片拼接,下面是一个使用Pillow库的示例:首先,你需要安装Pillow库:pipinstallpillow然后,可以使用以下代码实现图片拼接:fromPILimportImage#读取两张图片img1=Image.open('image1.jpg')img2=Image.open('image2.jpg'......
  • Python的requests库详细介绍
    Pythonrequests库是一个用于发送HTTP请求的简单而强大的库,它可以让你轻松地在Python中处理HTTP请求。这个库是Python中处理HTTP请求的标准工具,因其简洁的API和强大的功能而广受欢迎。1.安装requestspipinstallrequests2.基本用法2.1导入库importr......
  • 原神角色数据列表:数据更新到5.0版本,更换品质排序背景颜色,列表可以显示攻略
    <!DOCTYPEhtml><htmllang="zh-CN"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width,initial-scale=1.0"><title>原神角色数据列表</title>......
  • Python深度学习股价预测、量化交易策略:LSTM、GRU深度门控循环神经网络|附代码数据
    全文链接:https://tecdat.cn/?p=37539原文出处:拓端数据部落公众号 分析师:ShuoZhang本文以上证综指近22年的日交易数据为样本,构建深度门控循环神经网络模型,从股价预测和制定交易策略两方面入手,量化循环神经网络在股票预测以及交易策略中的效果,结合一个Python深度学习股价预测......
  • python实现RC4加解密算法
    目录RC4算法简介RC4算法的加密和解密流程RC4算法的Python实现代码解释RC4算法的应用场景RC4的安全性分析总结RC4(RivestCipher4)是一种流加密算法,由RonRivest于1987年设计。RC4广泛应用于各种加密协议,如SSL/TLS和WEP/WPA等。RC4算法因其简单、高效的特点受到广泛关......
  • Python实现SM4加解密算法
    目录SM4算法简介SM4算法的加密和解密流程SM4算法的Python实现代码解释总结SM4算法是中国国家密码局设计的块密码算法,广泛应用于无线局域网标准和其他安全通信系统中。以下是SM4算法的详细介绍,包括加密解密流程和Python的完整实现。SM4算法简介SM4是一种对称分组......
  • Python入门阶段---------容易错的点
    Python中笔试中容易出错的知识点汇总前言一、Python的变量命名规范二、List列表1.返回值2.列表中添加新元素3.列表中append()和extend()的区别三、字符串中的切片四、字典中键值对1.字典中的键也分类型2.字典中的查总结前言本文总结了Python入门中容易混......