
数据结构
wyn126
跑够一万公里就结婚
展开
-
【直接插入排序】和【希尔排序】
直接插入排序直接插入排序的思想:选取待排序数组的第一个元素,作为一个有序区间,将后面待排序的数组看作是一个无序区间 选取有序区间的最后一个元素key与待排序区间的第一个元素进行比较,如果待排序区间的第一个元素的值小于key的值,就将有序区间的最后一个元素后移,再将key与已经有序的区间其他值进行比较,直到找到一个元素的值小于key的值,将key插入到该元素后面的位置 直接插入排序...原创 2018-08-12 21:37:43 · 295 阅读 · 0 评论 -
非比较排序——归并排序
归并排序算法思路 首先让数组中的没一个数成为长度为1的有序区间,让后将相邻的长度为1的有序区间进行合并,得到最大长度为2的有序区间,接下来再把相邻有序区间进行合并,得到相邻长度为4的有序区间……最后将剩下的所有有序区间进行合并,直到让数组中的所有数合并成为一个有序区间。归并排序的实现需要开辟一个新的数组来保存合并之后的值 用图解释如下: 代码实现如下:#include<io...原创 2018-08-15 09:41:42 · 295 阅读 · 0 评论 -
【选择排序】和【堆排序】
选择排序假设升序 排序思想 选择排序的思想是每一趟在n-i+1个记录中选取关键字最小的记录,作为有序序列的第i个记录,并和第i个记录交换 在将要排序的区间中选择出最小的一个数字,与排序区间中的第一个数进行交换,让后依次缩小区间,直到区间只剩下一个数字为止 算法总共分为三步:选择数据->将数据放入正确的位置->缩小排序范围 如图,待排序的数组为{9,1,5,8,3...原创 2018-08-12 16:00:27 · 298 阅读 · 0 评论 -
二叉树面试题
二叉树的高度题目:输入一棵二叉树的根结点,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。 思路: 1、如果树为空,返回0 2、若果二叉树只有一个节点,返回1 3、如果二叉树中有左子树,返回左子树的高度+1 ...原创 2018-08-06 10:40:53 · 282 阅读 · 0 评论 -
二叉树的前序、中序、后序、层序遍历的递归及非递归,
二叉树的基本概念 每个结点最多有两棵子树,左子树和右子树,次序不可以颠倒。 性质: 1、非空二叉树的第n层上至多有2^(n-1)个元素。 2、深度为h的二叉树至多有2^h-1个结点。 3、满二叉树:所有终端都在同一层次,且非终端结点的度数为2。 4、在满二叉树中若其深度为h,则其所包含的结点数必为2^h-1。 5、完全二叉树:除了最大的层次即成为一颗满二叉树且层次最大那层所有的 ...原创 2018-08-06 08:37:02 · 778 阅读 · 0 评论 -
二叉树的线索化
1.为什么要对二叉树进行线索化? 一棵普通的二叉树,只能找到该节点的左右孩子信息,并不能知道该节点的直接前驱或后继信息。这种信息只有在动态遍历的过程中才能得到,因此我们引入线索二叉树来保存这些动态过程中得到的前驱和后继的信息。有n个节点的二叉树,必定存在n+1个空指针域,我们可以充分利用这些空指针域,来保存当前节点的前驱和后继信息。 在这里,我们引入了两个标志...原创 2018-04-08 15:37:01 · 6673 阅读 · 1 评论 -
交换排序之冒泡排序&&快速排序
1.最简单排序实现 冒泡排序的思想其实很简单,它是一种简单的选择排序,在细节上有很多种优化的方法。 它的基本思想是:两两比较相邻记录的关键字,如果反序则进行交换。 首先先来看一段简单的冒泡排序://冒泡排序初级版void Bubble(int* arr, int sz){ int i, j; //从下标为0的第一个元素与后面的每一个元素进行比较 for (i = 0原创 2017-12-26 17:41:24 · 4290 阅读 · 1 评论 -
vector和list的区别和使用
要了解vector,list,deque。我们先来了解一下STL。 STL是Standard Template Library的简称,中文名是标准模板库。从根本上说,STL是一些容器和算法的集合。STL可分为容器(containers)、迭代器(iterators)、空间配置器(allocator)、配接器(adapters)、算法(algorithms)、仿函数(functors)六个部分。指原创 2017-09-03 17:11:39 · 2228 阅读 · 1 评论 -
二叉树的递归与非递归
对一个树的访问,分别可以以前序访问,中序访问,后序访问,层序访问的访问的方法进行访问。 二叉树的表示方法有两种,一种是数组表示法,一种是链式存储法。用数组表示完全二叉树特别有效,但是若用数组表示一般的二叉树就会特别浪费时间,所以一般都会采用链式结构来表示.根据二叉树的定义,可以设计出二叉树的构造,一个二叉树里面应该存有树的根节点(_root),左子树(_lift),右子树(_right) 二叉链原创 2017-09-25 09:21:48 · 464 阅读 · 0 评论 -
冒泡排序,快速排序,直接插入排序,希尔排序,简单选择排序,堆排序,冒泡排序总结
从算法的简单性来看:简单算法:冒泡排序,简单选择排序,直接插入排序改进算法:希尔排序,堆排序,归并排序,快速排序从平均情况来看:堆排序,归并排序,快速排序好于希尔排序从最好情况来来看:冒泡排序和直接插入排序更好一些,要是待排数组基本有序,不应该考虑四种复杂算法从最坏情况来看:堆排序与归并排序好于快排以及简单排序从空间复杂度来看:归并排序需要额外开辟空间,时间复杂度为O(N),快...原创 2018-08-15 11:03:25 · 1013 阅读 · 0 评论