![](https://img-blog.csdnimg.cn/20190326105712838.jpeg?x-oss-process=image/resize,m_fixed,h_224,w_224)
C++数据结构与算法
数据结构与算法类似于"内功",只有把内功练好才能成为武林高手.所以学好数据结构与算法对计算机领域的人来说至关重要,本专栏对常用的数据结构与算法进行介绍,并用C++进行代码编写,用尽可能小的篇幅带领读者领略计算机的艺术.
su扬帆启航
亦余心之所善兮,虽九死其犹未悔
展开
-
C++的数据结构与算法(六)二叉树搜索算法学习
文章目录1.二分搜索树原理1.1 理论介绍1.2代码实现2.二分搜索树的节点插入3.二分搜索树的查找4.二分搜索树的遍历(深度优先遍历)5.层序遍历(广度优先遍历)6.删除最大值,最小值、删除节点7.二分搜索树的顺序性8.二分搜索树的顺序性9.二分搜索树的局限性 1.二分搜索树原理 1.1 理论介绍 同上篇文章介绍的二叉堆本质上类似,都是一个二叉树。选择什么特征的二叉树是根据具体问题来决定的,了解...原创 2019-07-14 17:17:44 · 736 阅读 · 0 评论 -
C++的数据结构与算法学习(五)堆与堆排序
文章目录1.堆的原理2.堆的代码实现3.堆排序(HeapSort) 1.堆的原理 堆排序与快速排序,归并排序一样都是时间复杂度为O(nlogn)O_(nlogn)O(nlogn)的几种高级排序方法。学习堆排序前,先介绍一下数据结构中的二叉堆(BinaryHeap)。 二叉堆的定义 二叉堆是完全二叉树或者是近似完全二叉树。 二叉堆满足二个特性: 1.父结点的键值总是大于或等于任何一个子节点的...原创 2019-05-26 12:30:01 · 497 阅读 · 0 评论 -
C++的数据结构与算法学习(四)快速排序
文章目录1.算法描述2.算法实现及优化3.算法分析 1.算法描述 快速排序(Quicksort),最早由东尼·霍尔基于分治思想提出的排序算法,现在各种语言中自带的排序库很多使用的都是快速排序。 快速排序的基本思想:通过一次排序将待排记录分隔成独立的两部分,其中一部分记录的关键字均比另一部分的关键字小,则可分别对这两部分记录继续进行排序,以达到整个序列有序。 最基础的算法步骤:使用分治法来把一...原创 2019-05-23 22:39:58 · 462 阅读 · 0 评论 -
C++的数据结构与算法学习(三)归并排序
1.算法描述 归并排序(MERGE-SORT)是建立在归并操作上的一种有效的排序算法,该算法是采用分治思想(Divide and Conquer)的一个非常典型的应用。 分治思想: 先将整个待排序的记录序列分割成为若干子序列分别进行直接插入排序,具体算法步骤: [1]选择一个增量序列t1,t2,…,tk,其中ti>tj,tk=1; [2] 按增量序列个数k,对序列进行k 趟排序; [3]...原创 2019-05-20 18:02:18 · 1409 阅读 · 7 评论 -
C++的数据结构与算法学习(二)简单排序算法
1. 选择排序(Selection Sort) 选择排序(Selection-sort)是一种简单直观的排序算法。它的工作原理:首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。 1.1 算法描述 n个记录的直接选择排序可经过n-1趟直接选择排序得到...原创 2019-03-26 21:02:18 · 575 阅读 · 4 评论 -
C++的数据结构与算法学习(一)排序算法概述
1.排序算法分类: 比较类排序:通过比较来决定元素间的相对次序,由于其时间复杂度不能突破O(nlogn),因此也称为非线性时间比较类排序。 非比较类排序:不通过比较来决定元素间的相对次序,它可以突破基于比较排序的时间下界,以线性时间运行,因此也称为线性时间非比较类排序。 2.算法复杂度 3. 算法评价指标 稳定:如果a原本在b前面,而a=b,排序之后a仍然在b的前面。 ...原创 2019-03-26 16:07:01 · 325 阅读 · 0 评论