文章目录

  • 七、堆排序
  • 八、计数排序

七、堆排序

1、堆排序介绍
堆排序(Heapsort)是指利用堆这种数据结构所设计的一种排序算法。堆积是一个近似完全二叉树的结构,并同时满足堆积的性质:即子结点的键值或索引总是小于(或者大于)它的父节点。堆排序可以说是一种利用堆的概念来排序的选择排序。分为两种方法:

大顶堆:每个节点的值都大于或等于其子节点的值,在堆排序算法中用于升序排列;

小顶堆:每个节点的值都小于或等于其子节点的值,在堆排序算法中用于降序排列;

堆排序的平均时间复杂度为 Ο(nlogn)。

2、算法步骤

  • 创建一个堆 H[0……n-1];
  • 把堆首(最大值)和堆尾互换;
  • 把堆的尺寸缩小 1,并调用 shift_down(0),目的是把新的数组顶端数据调整到相应位置;
  • 重复步骤 2,直到堆的尺寸为 1。

3、动图演示

4、Python练习

def buildMaxHeap(arr):import mathfor i in range(math.floor(len(arr)/2),-1,-1):heapify(arr,i)def heapify(arr, i):left = 2*i+1right = 2*i+2largest = iif left < arrLen and arr[left] > arr[largest]:largest = leftif right < arrLen and arr[right] > arr[largest]:largest = rightif largest != i:swap(arr, i, largest)heapify(arr, largest)def swap(arr, i, j):arr[i], arr[j] = arr[j], arr[i]def heapSort(arr):global arrLenarrLen = len(arr)buildMaxHeap(arr)for i in range(len(arr)-1,0,-1):swap(arr,0,i)arrLen -=1heapify(arr, 0)return arr

八、计数排序

1、计数介绍
计数排序的核心在于将输入的数据值转化为键存储在额外开辟的数组空间中。作为一种线性时间复杂度的排序,计数排序要求输入的数据必须是有确定范围的整数。

2、动图演示

3、Python练习

def countingSort(arr, maxValue):bucketLen = maxValue+1bucket = [0]*bucketLensortedIndex =0arrLen = len(arr)for i in range(arrLen):if not bucket[arr[i]]:bucket[arr[i]]=0bucket[arr[i]]+=1for j in range(bucketLen):while bucket[j]>0:arr[sortedIndex] = jsortedIndex+=1bucket[j]-=1return arr

文章转载于:
十大经典排序算法(Python)

十大经典排序算法5(Python版本)相关推荐

  1. 按复杂度有效性递减排序_十大经典排序算法:python源码实现,通俗深入讲解

    概述 提示:本文上万字,陆陆续续疏理知识点加测试代码,耗时近一个月.阅读时长40分钟左右. 本文将十大经典排序算法进行汇总,从源码实现.复杂度.稳定性进行分析,并对每种排序的特性进行点评.对典型算法, ...

  2. 9个元素换6次达到排序序列_全面讲解十大经典排序算法(Python实现)

    作者 | hustcc 链接 | https://github.com/hustcc/JS-Sorting-Algorith 排序算法是<数据结构与算法>中最基本的算法之一.排序算法可以分 ...

  3. 十大经典排序算法3(Python版本)

    文章目录 四.希尔排序 五.归并排序 四.希尔排序 1.希尔介绍 希尔排序,也称递减增量排序算法,是插入排序的一种更高效的改进版本.但希尔排序是非稳定排序算法. 希尔排序是基于插入排序的以下两点性质而 ...

  4. 十大经典排序算法6(Python版本)

    文章目录 九.桶排序 十.基数排序 九.桶排序 1.桶排序介绍 桶排序是计数排序的升级版.它利用了函数的映射关系,高效与否的关键就在于这个映射函数的确定.为了使桶排序更加高效,我们需要做到这两点: 在 ...

  5. 十大经典排序算法4(Python版本)

    文章目录 六.快速排序 六.快速排序 1.快速介绍 快速排序是由东尼·霍尔所发展的一种排序算法.在平均状况下,排序 n 个项目要 Ο(nlogn) 次比较.在最坏状况下则需要 Ο(n2) 次比较,但这 ...

  6. 十大经典排序算法2(Python版本)

    文章目录 二.选择排序 三.插入排序 二.选择排序 1.选择介绍 选择排序是一种简单直观的排序算法,无论什么数据进去都是 O(n²) 的时间复杂度.所以用到它的时候,数据规模越小越好.唯一的好处可能就 ...

  7. 十大经典排序算法1(Python版本)

    文章目录 一.排序算法与时间复杂度 二.冒泡排序 一.排序算法与时间复杂度 1.十大排序算法 排序算法可以分为内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次 ...

  8. 数据结构十大经典排序算法--Python

    十大经典排序算法 (java实现看这个)https://program.blog.csdn.net/article/details/83785159 名词解释: 1.冒泡排序 2.选择排序 3.插入排 ...

  9. python经典排序_python实现十大经典排序算法

    写在前面 本文参考十大经典排序算法(动图演示),这篇文章有动图显示,介绍的很详细.本文是部分内容有借鉴此博客,用python实现,有一些改进. 各种算法的时间.空间复杂度 1.冒泡排序 1.比较相邻的 ...

最新文章

  1. 【 FPGA 】控制数码管动态扫描显示的小实验
  2. Scala 中的函数式编程基础
  3. 2022年全球及中国脂肪酸氯化物行业专项可行性与供需前景调研报告
  4. [云炬创业管理笔记]第二章成为创业者讨论1
  5. [2021-09-11 CQBZ/HSZX多校联考 T1] 茅山道术 (后缀和优化dp)
  6. 不要错过使用jOOλ或jOOQ编写Java 8 SQL单行代码的机会
  7. 《objective-c基础教程》学习笔记(四)—— OC面向对象编程初探
  8. 【STM32】HAL库 STM32CubeMX教程十一---DMA (串口DMA发送接收)
  9. 那些有关求解next数组的算法
  10. 鸭子类型:一切都是为了复用
  11. 常用技术指标与四大交易理论
  12. 学习构造函数、拷贝构造函数、析构函数和重载运算符
  13. Anaconda 在线安装第三方库jieba
  14. android pickerview 多行,Android-PickerView系列之介绍与使用篇(一)
  15. Matplotlib笔记(莫烦Python)
  16. 如何无痛写文章 - 《麦肯锡教我的写作武器》
  17. QtEmbedded-4.8.6-arm 字体模糊 图片锐化不清晰
  18. 进制转换:十进制转六进制/转八进制
  19. java 8新特性之effectively final
  20. Unity学习笔记(六)---------------GameObject的Active与InActive

热门文章

  1. 计算机应用基础工作页,计算机应用基础工作页
  2. java 代码块的意义_Java基础(9) - 静态、代码块
  3. 大屏数据可视化源码_AxureBI数据大屏可视化原型设计软件
  4. # 字节数组转uint32_字节跳动客户端校招面经(21届秋招内推)
  5. mvc html.hidden,ASP.Net MVC Html.HiddenFor有错误的值
  6. mysql status lock_MySQL性能突发事件问题排查技巧
  7. 如何进行cad地理配准_【教程】自带高度建筑轮廓如何制作分色图
  8. mysql timestamp 默认值是什么#039;_MYSQL中TIMESTAMP类型的默认值
  9. android广播代码汇总一__无序广播
  10. 基于JAVA+SpringMVC+Mybatis+MYSQL的酒店预订管理系统