快速排序:

原理:

1、通过partion函数将列表最左边的数归位(归位的这个数左边的数都是比他小的,右边都是比他大的数)

2、通过partion函数递归,将每一个数归位

partion函数解读:

关键问题:
left<right:保证了至少有两个数,当left和right相等时就把保存的那个数写入(归位);

循环里面为什么要写left<right判断?

首先、假设tmp右边的所有数都比他大 ,这时就会让left指针和right指针指到一起,这里不写条件right指针就会越界(找不到值了!),所以这里要加上;其次、当右边找到了比tmp小的数,就会将这个数写到左边的left指针指向的位置上,然后循环调整;最后、这个条件不成立的时候恰好就是left和right指针指向同一个位置的时候,这个位置就是我们要放之前存tmp的位置。

递归:

不断分为两部分,让每个数都归位。

时间复杂度:
O(nlogn)    快速排序默认是最快的排序

快速排序优化:

假如:遇到最坏的情况(9,8,7....)

这时就要考虑修改递归的最大深度了;

解决方法<生成一个随机数将他对应的值与tmp交换/降低了上面这种随机事件发生的概率>

堆排序:主要就是三步(向下调整、建立堆、挨个出数)

先来了解一些树(一种数据结构)的知识:

根节点:A;

叶子的节点:位于最外层的位置 BCHIPQKLMN;

树的深度(层数);

树的度(往下的最多的叉数) 例如这里:上面的数的度就是6;

孩子节点在父节点下面,父亲节点在孩子节点上面;

子树:类似于包含在树树里的小枝丫。

通俗来说:完全二叉树就是最后一层可以的左边部分按顺序不能缺失,右边的部分按顺序可以缺失,除了最后一层其他节点下面都有两个叉;而满二叉树就是对应的每一个节点下面都有两个叉,最后一层是满的。

堆排序主要采用顺序存储方式。

父亲:i

左孩子:2*i+1

右孩子:2*i+2


孩子:n(不管左孩子还是右孩子)

父亲:(n-1)//2

本文主要是用大根堆(父亲比孩子大)

向下调整的函数优化:


 

堆排序的本质:调整 构建堆 挨个出数

Python第三方库heapq:

最后测试一下快排和堆排谁更快:

通过在函数上面安装装饰器检测两种排序算法的效率

装饰器安装代码:

很显然是快速排序快!!!

不相信的小伙伴可以在自己电脑上试试看,分别调用执行快排和堆排函数注意要修改递归的最大深度!!!

快速排序和堆排序算法的比较与详解相关推荐

  1. 算法经典“钓鱼”问题详解 基于贪心算法 C语言描述

    算法经典"钓鱼"问题详解 基于贪心算法 初始条件 在一条水平路边,有 n 2 ≤ n ≤ 25个钓鱼池,从左到右编号为1.2.3.--.n.小明有H1 ≤ H ≤ 16个小时的空余 ...

  2. 操作系统:基于页面置换算法的缓存原理详解(下)

    概述: 在上一篇<操作系统:基于页面置换算法的缓存原理详解(上)>中,我们主要阐述了FIFO.LRU和Clock页面置换算法.接着上一篇说到的,本文也有三个核心算法要讲解.分别是LFU(L ...

  3. 希尔排序基础java代码_java 算法之希尔排序详解及实现代码

    摘要:这篇Java开发技术栏目下的"java 算法之希尔排序详解及实现代码",介绍的技术点是"希尔排序详解.实现代码.希尔排序.Java.实现.代码",希望对大 ...

  4. kmeans python interation flag_机器学习经典算法-logistic回归代码详解

    一.算法简要 我们希望有这么一种函数:接受输入然后预测出类别,这样用于分类.这里,用到了数学中的sigmoid函数,sigmoid函数的具体表达式和函数图象如下: 可以较为清楚的看到,当输入的x小于0 ...

  5. python实验原理_Python实现蒙特卡洛算法小实验过程详解

    蒙特卡洛算法思想 蒙特卡洛(Monte Carlo)法是一类随机算法的统称,提出者是大名鼎鼎的数学家冯·诺伊曼,他在20世纪40年代中期用驰名世界的赌城-摩纳哥的蒙特卡洛来命名这种方法. 通俗的解释一 ...

  6. Matlab中的FCM算法代码及中文详解

    Matlab中的FCM算法代码及中文详解 转自:http://xiaozu.renren.com/xiaozu/106512/336681453 function [center, U, obj_fc ...

  7. 图解机器学习算法(6) | 决策树模型详解(机器学习通关指南·完结)

    作者:韩信子@ShowMeAI 教程地址:https://www.showmeai.tech/tutorials/34 本文地址:https://www.showmeai.tech/article-d ...

  8. KMP算法之next数组详解

    KMP算法之next数组详解 KMP算法实现原理 KMP算法是一种非常高效的字符串匹配算法,下面我们来讲解一下KMP算如何高效的实现字符串匹配.我们假设如下主串和模式串: int i;//i表示主串的 ...

  9. 天津理工大学《操作系统》实验二,存储器的分配与回收算法实现,代码详解,保姆式注释讲解

    天津理工大学<操作系统>实验二,存储器的分配与回收算法实现,代码详解,保姆式注释讲解 实验内容 1. 本实验是模拟操作系统的主存分配,运用可变分区的存储管理算法设计主存分配和回收程序,并不 ...

最新文章

  1. docker 上传到自己的容器
  2. linux怎么给所有用户安装软件,Linux安装软件的几种方法
  3. (42) Aeroo 模板实战
  4. 网页客户端调用gSoap发布服务,以及中文乱码问题
  5. 耗时两个礼拜,8000字安卓面试长文,建议收藏
  6. 信息学奥赛一本通(2023:【例4.8】数据统计)
  7. 微信小程序 navigator 用来实现页面跳转功能
  8. 嘉年华专访 | 我有故事,你有酒吗?
  9. 如何配置openjdk的 java home
  10. 计算机基础知识运算符,计算机基础运算符
  11. Mac下虚拟机使用那些事儿
  12. 如何access表中加一行_access数据库增加一行
  13. vue 使用 vue-awesome-swiper(swiper)解决方法
  14. 日照-公积金贷款逾期预测-比赛总结
  15. 爬虫系列 | 4、详解Requests的用法
  16. Turtlebot3入门教程(Burger)
  17. GRAF: Generative Radiance Fields for 3D-Aware Image Synthesis
  18. vue:hadoop@1.0.0 dev: `webpack-dev-server --inline --progress --config build/webpack.dev.conf.js
  19. 零基础如何学习Web安全渗透测试?推荐这份史上最详细的自学路线图!
  20. 减肥服务APP开发详细内容

热门文章

  1. java中rename的用法_Java File中renameTo的介绍和使用说明
  2. 翌加:抖音电商搜索流量如何做
  3. vue 实现下载pdf、导出png、打印功能
  4. 小程序线下怎么推广?和APP地推有什么差别?
  5. 设计模式-- 门面模式
  6. 游戏开发中的人工智能
  7. 打得开qq 找不到服务器,QQ空间找不到服务器的解决办法
  8. SUSE下给SQLPLUS增加历史命令功能
  9. delphi 单引号用quotedstr()就是爽
  10. Jquery 判断字符串包含字符串