首页 > 其他分享 >非递归快速排序

非递归快速排序

时间:2024-10-25 18:46:14浏览次数:5  
标签:end 递归 alist high start low 排序 快速

import random
def quick(alist):#非递归
        assert len(alist) >= 2
        q = []
        q.append((0,len(alist)-1))
        while q:
            start, end = q.pop()
            mid = alist[start]#mid is the pivot of the partition
            low = start
            high = end
            while low < high:
                while low < high and alist[high] >= mid:
                    high -= 1
                alist[low] = alist[high]
                while low < high and alist[low] < mid:
                    low += 1
                alist[high] = alist[low]
            alist[low] = mid
            if low - 1 > start:          
                q.append((start, low - 1))
            if low + 1 < end:
                q.append((low + 1, end))  
    x=random.sample(range(10000000),1500)
    x.sort()#排序后就是最坏情况,升降排序都一样(reverse=True)
    xx = x.copy()
    start = time.time()	    
    quick(xx)
    end = time.time()
    print("quick非递归",end - start)
    xquick = x.copy()
    start = time.time()	
    quick_sort(xquick,0,len(xquick) - 1)
    end = time.time()
    print("quick",end - start)                      
1500样本已排序
非递归0.12800002098083496
递归RecursionError: maximum recursion depth exceeded in comparison
1500样本未排序
非递归0.013000011444091797
递归0.006000041961669922
5000000样本未排序
非递归24.926000118255615
递归24.596999883651733
50000样本已排序
非递归126.83200001716614
递归RecursionError: maximum recursion depth exceeded in comparison

在这里插入图片描述

标签:end,递归,alist,high,start,low,排序,快速
From: https://blog.csdn.net/denghai_csdn/article/details/143199789

相关文章

  • 浅拷贝与深拷贝 以及嵌套和递归使用模板类
     1.浅拷贝和深拷贝——对象和类浅拷贝浅拷贝只复制对象的基本属性,而不复制引用类型的属性指向的对象,即只复制引用而不复制引用指向的对象在浅拷贝中,新对象与原始对象共享引用类型的属性指向的对象,即它们指向同一个对象。编译器提供的拷贝构造函数是浅拷贝,当一个对象修......
  • kubernetes【k8s介绍】【快速部署应用,管理容器】
    k8s提供:集中式管理集群的方法,也可快速部署应用1.关于部署方案2.什么时候需要k8s当你的应用只是跑在一台机器,直接一个docker+docker-compose就够了,方便轻松;当你的应用需要跑在3,4台机器上,你依旧可以使用每台机器单独配置运行环境+负载均衡器;当你的应用需要跑在10,20台机器......
  • 在Java中如何使用Spring Boot快速开发RESTful服务
    Java中通过SpringBoot快速开发RESTful服务关键步骤包含:1、利用SpringInitializr生成项目框架、2、创建资源表示类(ResourceRepresentationClass)、3、制作资源控制器(ResourceController)、4、编写业务逻辑层(ServiceLayer)、5、集成数据访问层(RepositoryLayer)、6、配置数据库连......
  • Oracle 排序
    在Oracle中,使用ORDERBY语法按字符串进行排序ASC或DESC关键字:指定升序或降序排序,默认情况下,排序是升序的。NULLSFIRST或NULLSLAST关键字:指定对空值的处理方式,默认情况下,空值排在最后。--按升序排序,空值排在最后SELECTcolumn_nameFROMtable_nameORDERBYcolumn_na......
  • 代码随想录算法训练营第24天(补第12天)| 递归遍历,迭代遍历,统一迭代
    前置知识二叉树的定义:structBNode{intval;BNode*lchild;BNode*rchild;BNode():lchild(NULL),rchild(NULL){}BNode(intval){val=val;lchild=rchild=NULL;}};递归遍历文章链接:https://programmercarl.com/二叉树的递归遍历.html#思路题目......
  • 【算法】递归
    目录一、简单讲解递归二、⾯试题08.06.汉诺塔问题三、合并两个有序链表四、206.反转链表五、24.两两交换链表中的节点六、50.Pow(x,n)一、简单讲解递归什么是递归:百度百科给出的解释,但其实就只一句话说,函数自己调用自己。为什么会使用递归:就是可以将一个主问题分......
  • 提取路径,只保留数字,并且从大到小排序
    importosimportre#目录路径directory_path='./train'#用于存储提取的数字(作为整数)的列表extracted_numbers=[]#获取目录下的所有文件和子目录名称files_and_dirs=os.listdir(directory_path)#遍历文件和子目录名称fornameinfiles_and_dirs:#......
  • 【1024程序员节】如何快速掌握人工智能技术技能
    一、前言    随着技术的革新,技术应用市场的饱和,大环境就业压力越来越大,只有不断地持续学习,才能永远立于不败之地。今天打开BOSS看了看,招JAVA的实在是不多,反而机器学习、人工智能、算法类的岗位很多、说明人工智能技术是当下热门的课题,也是企业寻找突破的方向,人才短缺......
  • 如何快速在github中下载东西
    快速在github中下载东西的方法:1.使用GitClone;2.使用GitHubDesktop;3.使用下载按钮;4.使用wget或curl;5.使用GitHubCLI。Git是GitHub的基础技术,你可以使用GitClone命令从GitHub上克隆(下载)整个仓库到你的本地计算机。1.使用GitCloneGit是GitHub的基础技术,你可以使用Git......
  • Ruoyi 之前端控制排序方式
           由于在与前端对接接口时,动态排序的需求较多,导致代码结构混乱,严重影响了后端的代码质量,并且修改频繁。参考了Ruoyi的分页排序插件 startPage,我对其进行了改进,开发出了自己的 startPagePlus。1、参考Ruoyi本身的startPage。在BaseController下添加 startPage......