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 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 快速排序----数据结构 -> 正文阅读

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

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

  1. 挑选基准值:从数列中挑出一个元素,称为"基准";
  2. 分割:重新排序数列,所有比基准值小的元素摆放在基准前面,所有比基准值大的元素摆在基准后面(与基准值相等的数可以到任何一边)。在这个分割结束之后,对基准值的排序就已经完成;
  3. 递归排序子序列:递归地将小于基准值元素的子序列和大于基准值元素的子序列排序。
#快速排序
def partition(arr,low,high):
    i = low-1
    cach = arr[high]
    for j in range(low,high):
        
        if arr[j] < cach:
            i = i+1
            arr[i],arr[j] = arr[j],arr[i]
        
    arr[i+1],arr[high] = arr[high],arr[i+1] 
    print(arr)
    print(i+1)
    return ( i+1 ) 
    
def quicksort(arr,low,high): 
    if low < high: 
  
        pi = partition(arr,low,high) 
        quicksort(arr, low, pi-1) 
        quicksort(arr, pi+1, high)     
    
m = [10,234,23,56,34,1,2,19]
n=len(m)
quicksort(m,0,n-1)
print(m)

第一步:找个基准,进入quicksort后先进行partition分割操作,返回pi值

arr[i],arr[j]发生操作的值
10 10 
1 234 
2 23 
[10, 1, 2, 19, 34, 234, 23, 56]
返回值pi:3

第二步:进入第一个递归1.1(此时不会再进行下去,再次进入下一个递归的时候发现low < high条件不满足),退出第一个递归

arr[i],arr[j]发生操作的值
1 10 

[1, 2, 10, 19, 34, 234, 23, 56]
返回值pi:1

第三步:进入第二个递归1.2,Pi是6,满足下一个递归的条件,进入以后发现传进来的是low=4<high=pi+1故满足条件进入第二个递归里面的第一个递归(可以理解他为它为2.1)

34 34 

23 234 

[1, 2, 10, 19, 34, 23, 56, 234]
6 

第四步:进入2.1以后返回值为,再次进入递归2.2判断条件是否满足(不满足)。(此时排序也已经完成)

[1, 2, 10, 19, 23, 34, 56, 234]
4

第五步:quicksort函数全部执行完毕。

时间复杂度为O(n*log(2)n)(最坏的时候为O(n^2))
空间复杂度O(log(2)n)
可以画一个递归树来了解(简单易懂,可以说一句那个log(2)n的意思就是有n个数,不断地除以2也就是所谓的log(2)n,和对数函数刚好相反嘛)
递归算法的时间复杂度




写给学弟们(给俺动手写,俺才懒得讲,略)

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2021-07-10 14:44:49  更:2021-07-10 14:45:44 
 
开发: 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/25 17:24:53-

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