1. 满二叉树 :一棵深度为k 且有${2^k 1 }$个结点的二叉树。(特点:每层都“充满”了结点) 2. 完全二叉树 :深度为k 的,有n个结点的二叉树,当且仅当其每一个结点都与深度为k 的满二叉树中编号从1至n的结点 一一对应 . 3. 具有n个结点的完全二叉树的深度为log2(n)向下取整 ...
分类:
其他好文 时间:
2019-11-22 23:56:38
阅读次数:
187
堆排序 堆排序是在二叉树的概念上建立起来的一种排序方式,利用的是二叉树中的完全二叉树;完美二叉树两种树形结构来完成堆排序 关于完全二叉树的概念可以去查阅一些,这里不作详细说明,完美二叉树依据从上至下,从左至右的方式可以转换成一种数组存储结构,每一个节点都是对应数组索引。 基本概念: 0.堆排序分为大 ...
分类:
编程语言 时间:
2019-11-22 09:13:51
阅读次数:
132
一、直接插入排序 直接插入排序 和折半插入排序 ,图示是一样的,但是在进行插入的时候就看出效率 了 。 折半插入排序:采用折半查找插入; 直接插入排序:一次比较插入。(代码中很明显) 数据量大折半插入的效率高点 //直接插入排序//算法思想:每趟将一个待排的关键字按照其值的大小插入到已经排好的部分有 ...
分类:
编程语言 时间:
2019-11-21 17:02:37
阅读次数:
89
堆排序 public static void heapSort(int[] arr) { //构建最大堆 heapInsert(arr); int size = arr.length; while (size > 1) { //调整堆顶和堆底的数值 swap(arr, 0, size - 1); s ...
分类:
编程语言 时间:
2019-11-21 13:47:47
阅读次数:
77
十大经典排序算法(python实现)(原创) 使用场景: 1,空间复杂度 越低越好、n值较大: 堆排序 O(nlog2n) O(1) 2,无空间复杂度要求、n值较大: 桶排序 O(n+k) O(n+k) 经典排序算法图解: 经典排序算法的复杂度: 大类一(比较排序法): 1、冒泡排序(Bubble ...
分类:
编程语言 时间:
2019-11-20 21:35:50
阅读次数:
65
本文首发于:面试必知必会|理解堆和堆排序微信公众号:后端技术指南针持续输出干货 欢迎关注 惊喜直达! 本文将阐述堆和堆排序的基本原理,通过本文将了解到以下内容: 堆数据结构的定义 堆的数组表示 堆的调整函数 堆排序实践 1.堆的简介 堆是计算机科学中的一种特别的树状数据结构。若是满足以下特性,即可称 ...
分类:
编程语言 时间:
2019-11-20 19:31:13
阅读次数:
110
#include<stdio.h> #include<stdlib.h> #include<math.h> #include<string.h> int main(void) { int n; printf("请输入需要输入的整数的数量:"); scanf("%d", &n); // 确定深度 in ...
分类:
编程语言 时间:
2019-11-17 23:37:04
阅读次数:
101
各种排序算法所需辅助空间 1、 所有的简单排序方法(包括:直接插入、起泡和简单选择)和堆排序的空间复杂度为O(1); 2、 快速排序为O(logn ),为栈所需的辅助空间; 3、 归并排序所需辅助空间最多,其空间复杂度为O(n ); 4、链式基数排序需附设队列首尾指针,则空间复杂度为O(rd )。 ...
分类:
编程语言 时间:
2019-11-16 21:32:40
阅读次数:
74
堆排其实就是选择排序,只不过用了完全二叉树特性。 堆排思想 : 利用完全二叉树特性建堆和重复选择调整来得到有序数组。 完全二叉树有什么特性呢? 节点左对齐 > 层序遍历不会出现空,可以用数组表达(访问效率高) 那么可以将它映射到数组上,并且遵循一个规律: 设i为当前节点索引, i->left = 2 ...
分类:
其他好文 时间:
2019-11-16 17:58:48
阅读次数:
137
二叉树的定义 二叉树(Binary Tree)是n(n≥0)个元素的有限集合,该集合为空或者为由一个称为“根”的元素及两个不相交的、被分别称为左子树和右子树的二叉树组成 二叉树的基本特点: 每个结点最多有两棵子树 左子树和右子树是有顺序的,且不可颠倒 图一 节点、度和叶子的概念 1、结点 二叉树中的 ...
分类:
其他好文 时间:
2019-11-13 00:56:08
阅读次数:
106