Python3 notes

简介: Python3 notes

Python 堆排序

作为一个菜鸟,感觉源代码的注释写得太少了,以下做点注解吧。

关键有3个点:

1、先把堆调成小根堆的状态,方法是在每个结点的所有根部中确定它的位置;

2、heapify函数实际上是对传入的arr[i]点在其所有根部中确定它的位置;

3、堆头与堆尾交换,此后堆尾退出堆,堆的范围缩小1,公式中i即为堆的长度,之后再将新到堆首的点放在合适的位置,因为其他点均已在正确的位置上,其他点最多与新点交换一次。

def heapify(arr, n, i): 

   largest = i  

   l =2* i +1     # left = 2*i + 1

   r =2* i +2     # right = 2*i + 2

 

   if l < n and arr[i]< arr[l]: 

       largest = l

 

   if r < n and arr[largest]< arr[r]: 

       largest = r

 

   if largest != i: 

       arr[i],arr[largest]= arr[largest],arr[i]  # 交换

       # 此时largest位置的数字(也就是最开始输入那个lis[i])处于待定状态,需要在它所有根部中确定其位置

       heapify(arr, n, largest) 

 

def heapSort(arr): 

   n = len(arr) 

 

   # Build a maxheap.

   for i in range(n,-1,-1): 

       # 先把堆调整好小根堆的状态,在全堆中逐个调整每个数字的位置,调整的方法是在它所有根部中确定其位置

       heapify(arr, n, i) 

 

   # 一个个交换元素

   for i in range(n-1,0,-1): 

       arr[i], arr[0]= arr[0], arr[i]   # 交换

       # 把新上来的0号安排到合适的位置上去,其中i指的是要调整的堆的范围

       heapify(arr, i,0)

相关文章
|
6月前
|
JavaScript Java 应用服务中间件
centos部署vue项目(java,tomcat环境的搭建)
centos部署vue项目(java,tomcat环境的搭建)
131 0
|
6月前
|
网络协议 Python
Python3 notes
Python3 notes
npx指定下载源
npx指定下载源
267 0
|
6月前
|
开发工具 C语言 数据安全/隐私保护
git提交代码到远端仓库的方法详解
git提交代码到远端仓库的方法详解
|
C语言
C语言:使用指针使字符串逆序
题目: 链接:字符逆序__牛客网 来源:牛客网 将一个字符串str的内容颠倒过来,并输出。
278 0
|
存储 缓存 Java
深入探索Java Integer类:数字封装与强大功能
在Java编程中,数字处理是一项基础而重要的任务。除了基本数据类型,Java还提供了许多包装类,用于对基本数据类型进行封装和扩展功能。其中,Integer类是用于封装整数类型的包装类,它不仅提供了基本数据的封装,还赋予了强大的数字操作功能。本文将带您深入了解Java中的Integer类,包括其特点、用法、常见操作以及在实际开发中的应用。
|
数据采集 算法 C++
DFS(深度优先搜索)详解(概念讲解,图片辅助,例题解释,剪枝技巧)
DFS(深度优先搜索)详解(概念讲解,图片辅助,例题解释,剪枝技巧)
940 0
|
网络协议 Linux 网络安全
无公网IP,SSH远程连接Linux CentOS服务器【内网穿透】
本次教程我们来实现如何在外公网环境下,SSH远程连接家里/公司的Linux CentOS服务器,无需公网IP,也不需要设置路由器。
|
Java Linux API
IntelliJ IDEA插件开发系列教程之新建项目
Smart Input Source插件推荐给大家使用,它可以实现根据输入处上下文自动切换到对应的输入法,将开发者从杂乱繁琐的输入法切换中解救出来。具体效果请查看《IntelliJ IDEA插件实现自动切换输入法》,欢迎到插件市场下载安装。IntelliJ IDEA插件开发系列教程综述IntelliJ IDEA插件开发系列教程之开发思路IntelliJ IDEA插件开发系列教程之新建项目进行代码演
IntelliJ IDEA插件开发系列教程之新建项目
|
Web App开发 移动开发 前端开发
前端基础知识概述 -- 移动端开发的屏幕、图像、字体与布局的兼容适配 (下)
前端基础知识概述 -- 移动端开发的屏幕、图像、字体与布局的兼容适配 (下)
361 0
前端基础知识概述 -- 移动端开发的屏幕、图像、字体与布局的兼容适配 (下)