| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 数据结构与算法 -> 【C语言】-- 数据结构 -- 选择排序类(简单选择排序,堆排序)(超详解+动图+源码) -> 正文阅读 |
|
[数据结构与算法]【C语言】-- 数据结构 -- 选择排序类(简单选择排序,堆排序)(超详解+动图+源码) |
?常见排序:
目录 选择排序类:?? ? ? ??选择排序类的基本思想:每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完 。 ? 1、?简单选择排序:
1.1?简单选择排序的特性总结:
1.1.1 时间复杂度:????????????????时间复杂度:O(N^2) ? ? ? ? ? ? ? ? ? ? ? ?是常见的等差数列:n, n-1, n-2, …… 1。 1.1.2?空间复杂度:????????????????空间复杂度:O(1) 1.1.3 稳定性:?? ??2、 堆排序:????????堆排序(Heapsort)是指利用堆积树(堆)这种数据结构所设计的一种排序算法,它是选择排序的一种。它是通过堆来进行选择数据。需要注意的是排升序要建大堆,排降序建小堆。
2.1.?堆排序的要点分两步:2.1.1?建立大小堆:? ? ? ? ? 对于向下调整,需要根节点的堆成立大小堆,否则会导致堆的混乱,而针对于一个未排序为堆的数组,如果以a[0]为父节点,会导致堆的混乱。
2.1.2 利用大小堆排序:2.1?堆排序的特性总结:
2.1.1?时间复杂度:????????首先,我们需要知道向下建堆的时间复杂度: ? ? ? ?即:O(N)。 ? ? ? ?建立大小堆的时间复杂度: ? ? ? ? 于是,时间复杂度为:?O(N)。 (倒过来看,原来是从第1层向其他层看,而这个建队是从最后一个父节点开始,于是就从第h-1层看) ???????利用大小堆排序的时间复杂度: ?? ? ? 于是,时间复杂度为:?O(N*logN)。 ? 单趟: ? ? ? ?在之前,我们已经建堆完成,其的无序是因为我们将最后一个元素与第一个元素交换位置。然后 n-1 ,于是唯一一个堆无序的就是第一个元素。而最差的情况就是其需要调到最底层,于是时间复杂度为O(logN)。 ? 全趟: ? ? ? ?单趟是O(logN),一共有n个元素,所以就是:O(N*logN)。 2.1.2?空间复杂度:? ? ? ?没有使用递归,并且变量的创建也是常数。所以是O(1)。 2.1.3?稳定性:
|
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/25 23:24:31- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |