Python3 notes

简介: Python3 notes

Python 堆排序

改进参考代码:

1、迭代堆化

2、迭代的两种写法

def heapify(arr):

   n = len(arr)

   for i in reversed(range(n // 2)):

       shiftDown(arr,n,i)


def shiftDown(arr, n, k):

   while2* k +1< n:

       j =2* k +1

       if j +1< n and arr[j +1]< arr[j]:

           j +=1

       if arr[k]<= arr[j]:

           break

       arr[k], arr[j]= arr[j], arr[k]

       k = j


def shiftDown2(arr, n, k):

   smallest, l, r = k,2* k +1,2* k +2

   while l < n:

       if arr[l]< arr[smallest]:

           smallest = l

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

           smallest = r

       if smallest == k:

           break

       else:

           arr[k], arr[smallest]= arr[smallest], arr[k]

           k = smallest

           l, r =2* k +1,2* k +2


def heapSort(arr):

   n=len(arr)

   heapify(arr)

   print("堆化:",arr)

   for i in range(n-1):

       arr[n-i-1],arr[0]= arr[0],arr[n-i-1]

       # print("交换最小值后:",arr)

       shiftDown(arr,n-i-1,0)

       # print("调整后:",arr)



arr =[3,2,1,9,7,8]

heapSort(arr)

print("排序后:",arr)

相关文章
|
8月前
|
SQL 关系型数据库 数据库连接
Python3 notes
Python3 notes
|
8月前
|
小程序 JavaScript Java
个人健康|个人健康管理小程序|基于微信小程序的个人健康管理系统设计与实现(源码+数据库+文档)
个人健康|个人健康管理小程序|基于微信小程序的个人健康管理系统设计与实现(源码+数据库+文档)
404 0
|
敏捷开发 测试技术 项目管理
【软考总结】---软件工程(一)
【软考总结】---软件工程(一)
244 0
|
编解码 数据挖掘 数据处理
[工作必备]pandas数据分析处理52个常用技巧(上)
[工作必备]pandas数据分析处理52个常用技巧
190 1
|
自然语言处理 Python
Python实验三:Python程序设计之组合数据类型
Python实验三:Python程序设计之组合数据类型
494 1
Python实验三:Python程序设计之组合数据类型
html+css实战95-border使用方法
html+css实战95-border使用方法
144 0
html+css实战95-border使用方法
SwiftU—使用Group在多个模拟器中预览视图
SwiftU—使用Group在多个模拟器中预览视图
139 0
SwiftU—使用Group在多个模拟器中预览视图
|
存储 Java BI
Java8 Stream相关
Java8 Stream相关
238 0
Java8 Stream相关
|
运维 负载均衡 安全
最佳实践—如何选择升配与扩容
本文介绍了选择升配与扩容的逻辑和方法。