IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> python快速排序 -> 正文阅读

[数据结构与算法]python快速排序

1. 思路

  1. 从序列中任选一个元素(temp)作为中间数,
  2. 列表分为两部分,把所有比 temp小的数移动到它的左边,再所有比 temp大的数移动到它的右边(简单理解:左边都比temp小,右边都比temp大)
  3. 分别对左右两部分进行递归,直到左右两部分剩余一个元素

2. 举例

比如现在有列表: a = [6,7,4,1,8,5,3,9,2]

  1. 先从列表中找 6 作为中间数,将列表分为两部分(6的左边比6小,右边比6大)
    在这里插入图片描述
  2. 对于左半部分,重复第一步的操作
    在这里插入图片描述
    在这里插入图片描述
  3. 右半部分也是一样
    在这里插入图片描述

3. 详细步骤分析

列表: a = [6,7,4,1,8,5,3,9,2]

  1. 先从列表中找 6 作为中间数,将列表分为两部分(6的左边比6小,右边比6大)

在这里插入图片描述2. 左半部分

1. 在 [2, 3, 4, 1, 5, 6, 8, 9, 7] 基础上进行的
2. 左半部分为 2,3,4,1,5
3. 选择第一个元素 2 作为temp,将剩余元素分为 [1,2] 和 [4,3,5] 两个部分

在这里插入图片描述
1,2,4,3,5 的右半部分
[4,3,5]
在这里插入图片描述 3. 右半部分
在这里插入图片描述

4. 代码实现

# ① 列表分为两部分,大的在temp右 小的在temp左
def fun(data,left,right):
    temp = data[left]
    print('temp:',temp)
    while left < right:
            while left < right and data[right]>=temp: # 1. 从右边开始找比temp小的数
                right -=1 # 如果比temp大 就向左边走一步
            data[left] = data[right] # 把右边的值写到左边空位上
            print(data,'right  right下标:',right)
            while left<right and data[left]<=temp: # 2. 从左边开始找比temp大的数
                left+=1   # 如果比temp小 就向右边走一步
            data[right] = data[left] # 把左边的值写到右边空位上
            print(data,'left   left 下标:',left)
    data[left] = temp # temp归位
    print('temp归位:{}  temp下标{}:'.format(data,left))
    return left
# ② 分别对左右两部分进行递归
def quick_sort(data,left,right):
    if left<right:# 至少有两个元素
        mid=fun(data,left,right)
        print('----------------------')
        quick_sort(data,left,mid-1)
        quick_sort(data,mid+1,right)
# ③ 调用
a = [6,7,4,1,8,5,3,9,2]
print('排序前:',a)
# a = [6,1,2,7,9,3,4,5,10,8]
# a = [5,7,4,6,3,1,2,9,8]
quick_sort(a,0,len(a)-1)
print('排序后:',a)
def quick_sort(data):
    if len(data) < 2:
    	    return data
    else: 
    	    temp = data[0]  
    	    less = [i for i in data[1:] if i <= data[0]]
    	    greater = [i for i in data[1:] if i > data[0]]
    	    print(less + [temp] + greater)
    return quick_sort(less) + [temp] + quick_sort(greater)

a = [6,7,4,1,8,5,3,9,2]
print(quick_sort(a))

在这里插入图片描述

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-05-10 12:08:32  更:2022-05-10 12:10:47 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 3:38:55-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码