一、二叉树
1.基本特征
1)树型结构的最简模型,每个节点最多有两个子节点——左子节点和右子节点。
2)单根性,每个子节点有且仅有一个父节点,整棵树有且仅有一个根节点。
3)递归性,以任何一个节点为根都可以看做是一个二叉树,整个二叉树可以看成是由若干子二叉树按照递归的结构复合而成。这种结构的递归性决定了采用递归的算法解决二叉树问题会非常简单。
2.基本操作:按照特定的规则生成,再按照特定的规则遍历,将会产生特定的效果。
3.实现要点(以有序二叉树为例)
有序二叉树:对于树上的任何一个节点,其左子树中的节点都比该节点的值小或等,右子树中的节点都比该节点的值大或等。
50 70 20 60 40 30 10 90 80
         50
      __/  \__
     /|       \
   20 |        70
  /  \|       /  \
10    40    60    90
     /           /
   30          80
  /
10
前序遍历:D-L-R、D-R-L
中序遍历:L-D-R、R-D-L
后序遍历:L-R-D、R-L-D
有序二叉树的中序遍历:
10 20 30 40 50 60 70 80 90

二、常用排序算法
13 23 20 12 15 31 19 26 24
1.冒泡排序
1)算法
A.比较相邻的元素,如果第一个比第二个大就交换它们;
B.对每一对相邻的元素都做同样的工作,从开始的第一对到结尾的最后一对。经过这一步,最后的元素是最大值;
C.针对所有的元素重复以上步骤,除了最后一个;
D.持续每次对越来越少的元素重复以上步骤,直到没有元素需要交换。
2)评价
平均时间复杂度O(N^2),稳定,对数据的有序性敏感。

2.插入排序
12 13 15 20 23 31 19 26 24
1)算法
A.从第一个元素开始,该元素可以认为已经有序;
B.取出下一个元素,在已经排序的元素序列中从后向前扫描;
C.若该元素大于新元素,则将该元素移到下一个位置;
D.若该元素小于或等于新元素,则将新元素插入到该元素之后;
E.重复步骤B,直至处理完所有的元素。
2)评价
平均时间复杂度O(N^2),稳定,对数据的有序性敏感。相对冒泡排序,没有交换而仅仅是移动,略优于冒泡。

3.选择排序
12 13 15 23 20 31 19 26 24
1)算法
首先在未排序序列中找到最小元素,并于该序列的首元素做交换,再从剩余的未排序序列中继续寻找最小元素重复以上过程,直到未排序序列中仅剩一个元素为止。
2)评价
平均时间复杂度O(N^2),稳定,对数据的有序性不敏感。相对冒泡而言,因为交换的次数少,略优于冒泡。

4.快速排序
50
0 10 20 30 40 50 80 70 60 90 100
              i
              p
              j
1)算法
A.从序列中找出一个元素作为基准;
B.从新组织序列,所有小于基准的元素都位于基准的左侧,所有大于基准的元素都位于基准的右侧,与基准相等的元素可位于基准的任一侧;
C.以递归的方式分别对左右两个分组进行排序。
2)评价
平均时间复杂度O(NlogN),不稳定。理论上如果每次都能做到均匀分组,会得到的最快的排序速度。
思考:实现qsort()函数。

c++ 10的更多相关文章

  1. Linux平台 Oracle 10gR2(10.2.0.5)RAC安装 Part3:db安装和升级

    Linux平台 Oracle 10gR2(10.2.0.5)RAC安装 Part3:db安装和升级 环境:OEL 5.7 + Oracle 10.2.0.5 RAC 5.安装Database软件 5. ...

  2. Linux平台 Oracle 10gR2(10.2.0.5)RAC安装 Part1:准备工作

    Linux平台 Oracle 10gR2(10.2.0.5)RAC安装 Part1:准备工作 环境:OEL 5.7 + Oracle 10.2.0.5 RAC 1.实施前准备工作 1.1 服务器安装操 ...

  3. ArcGIS 10.0紧凑型切片读写方法

    首先介绍一下ArcGIS10.0的缓存机制: 切片方案 切片方案包括缓存的比例级别.切片尺寸和切片原点.这些属性定义缓存边界的存在位置,在某些客户端中叠加缓存时匹配这些属性十分重要.图像格式和抗锯齿等 ...

  4. CI Weekly #10 | 2017 DevOps 趋势预测

    2016 年的最后几个工作日,我们对 flow.ci Android & iOS 项目做了一些优化与修复: iOS 镜像 cocoapods 版本更新: fir iOS上传插件时间问题修复: ...

  5. 10个最好用的HTML/CSS 工具、插件和资料库

    大家在使用HTML/CSS开发项目的过程中,有使用过哪些工具,插件和库?下面介绍的10种HTML/CSS工具,插件和资料库,是国外程序员经常用到的. Firebug Lite FirebugLite ...

  6. 【Win 10 应用开发】启动远程设备上的应用

    这个功能必须在“红石-1”(build 14393)以上的系统版中才能使用,运行在一台设备上的应用,可以通过URI来启动另一台设备上的应用.激活远程应用需要以下前提: 系统必须是build 14393 ...

  7. 在Ubuntu 16.10安装mysql workbench报未安装软件包 libpng12-0错误

    1.安装mysql workbench,提示未安装软件包 libpng12-0 下载了MySQL Workbench 6.3.8   在安装的时候报错: -1ubu1604-amd64.deb 提示: ...

  8. Ubuntu 16.10 安装byzanz截取动态效果图工具

    1.了解byzanz截取动态效果图工具 byzanz能制作文件小,清晰的GIF动态效果图,不足就是,目前只能通过输入命令方式来录制. byzanz主要的参数选项有: -d, --duration=SE ...

  9. Ubuntu 16.10 安装KolourPaint 4画图工具

    KolourPaint 4画图工具简单实用,可以绘画.视频处理和图标编辑: • 绘画:绘制图表和“手绘” • 视频处理:编辑截图和照片;应用特效 • 图标编辑:绘画剪贴和标识透明化 1.在Ubuntu ...

  10. 【解决方案】Myeclipse 10 安装 GIT 插件 集成 步骤 图解

    工程开发中,往往要使用到集成GIT ,那么下面说说插件安装步骤 PS:以Myeclipse 10 为例,讲解集成安装步骤. ----------------------main------------ ...

随机推荐

  1. android使用Genymotion作为模拟器

    Genymotion模拟器的好处自然不用多说,直接来说怎么用: (1)去官方网站下载:中文或英文的: http://www.genymotion.net/ http://www.genymotion. ...

  2. css中的7中属性选择器

    在CSS的选择符中有七个属性选择符.它们分别是: 1.E[att] 选择具有att属性的E元素. 2.E[att="val"] 选择具有att属性且属性值等于val的E元素. 3. ...

  3. [Oracle]Sqlplus连接成功,但pl/sql连接不成功,提示“ora-12145:无法解析指定的连接标识符”

    Oracle客户端安装成功后,使用Net Manager配置成功,测试服务成功.使用Sqlplus连接成功.但使用pl/sql developer连接总是提示“ora-12145:无法解析指定的连接标 ...

  4. HDU ACM 1078 FatMouse and Cheese 记忆化+DFS

    题意:FatMouse在一个N*N方格上找吃的,每一个点(x,y)有一些吃的,FatMouse从(0,0)的出发去找吃的.每次最多走k步,他走过的位置能够吃掉吃的.保证吃的数量在0-100.规定他仅仅 ...

  5. cxf的使用及安全校验-02创建简单的客户端接口

    上一篇文章中,我们已经讲了如果简单的创建一个webservice接口 http://www.cnblogs.com/snowstar123/p/3395568.html 现在我们创建一个简单客户端接口 ...

  6. Oracle存储过程procedure

    --给plsql块设置一个名称保存下来便于调用 /* Create or replace procedure 名称 As 声明变量 Begin //代码块 End; --plsql块 Declare ...

  7. iOS 无限轮播图的两种实现

    首先说一下实现的思想: 用UIScrollView实现,在scrollView上添加3个UIImageView,分别用来显示上一张图片,当前显示的图片,下一张图片.scrollView在不滑动的时候永 ...

  8. QML添加右键菜单

    MouseArea { id: mouseRegion anchors.fill: parent; acceptedButtons: Qt.LeftButton | Qt.RightButton // ...

  9. Jquery函数实现时间显示模式为更新于+被当前时间减去后剩余的时间值(例如:更新于三小时前)的处理。

    var time_eles = $(".time_tranfer"); for(var i =0; i < time_eles.length;i++){ var time_e ...

  10. [转]C++学习心得

    1.把C++当成一门新的语言学习: 2.看<Thinking In C++>: 3.看<The C++ Programming Language>和<Inside The ...