数据结构与算法
Xu_lib
Just Coding !
展开
-
常用算法排序(04)—— 归并排序
一、 归并排序的基本思想归并排序是利用先递归进行分解,将一个规模为 nnn 的问题分解成两个规模为 n/2n/2n/2 的问题,再不断的继续进行递归分解成最终规模为111的问题。然后再逐渐的从小规模结果进行合并,最终得到完整的结果。也即分而治之的思想。其图解如下:原图地址二、算法分析归并排序使用了空间换时间的方式,用一个辅助数组来存储每次排序后的结果,然后再将其复制到原数组对应的位置上...原创 2020-03-12 22:44:58 · 242 阅读 · 0 评论 -
heap —— 堆
1、C++ STL中的 heap(堆)数据结构是一棵完全二叉树。在标准库中heap算法是在 algorithm 头文件中,提供了如下的几个操作的函数。make_heap():根据指定的迭代器区间,来创建一个堆。push_heap():把指定迭代区间的最后一个元素插入到heap中,常常和vector配合使用。pop_heap:将指定迭代区中的最后一个元素删除。sort_heap:进行堆排序...原创 2020-03-06 20:47:41 · 251 阅读 · 0 评论 -
二分查找算法
二分查找的前提条件是:查找的对象必须是有序的数组。然后用中间位置的元素与要查找的值进行比较,不断的来缩小查找的范围。一、递归方法当数组为空时,返回false 递归的终止条件是起始索引大于终止索引 求中间位置的元素下标用mid = startIndex + (endIndex - startIndex) / 2,而不是 mid = (startIndex + endIndex ) /...原创 2019-10-29 20:35:28 · 196 阅读 · 0 评论 -
常用的排序算法(03)—— 选择排序
一、选择排序1、选择排序相对于冒泡排序,要高效一些。因为冒泡排序会有大量的交换,而选择排序则可以直接将对应的元素放在指定的位置上。2、选择排序由于每次都要遍历整个数组,需要遍历n次,所以选择排序的时间复杂度为3、基本思想是:每次选择一个元素作为最小值,然后遍历选定元素之后的所有元素。如果后面有元素大于选定的元素,就将其进行交换,这样经过一轮循环之后,最小的元素就位于数组的首地址处。依...原创 2019-09-16 10:01:21 · 166 阅读 · 0 评论 -
常用的排序算法(02)—— 冒泡排序
1、冒泡排序的特点冒泡排序是稳定排序,只有当两个元素不同时才会交换 冒泡排序是原址排序,不需要借助额外的空间 由于每次都要遍历整个数组,两个循环,所以冒泡排序的时间复杂度为2、冒泡排序的基本思想从头开始比较相邻的元素,如果后面的比前面的小,就交换。通过第一次循环找到最大的元素,并将其放在数组的最后位置。依次循环,直至数组中的所有元素都排好序。3、代码示例#include...原创 2019-09-16 09:03:19 · 935 阅读 · 0 评论 -
常用的排序算法(01)—— 快速排序
排序有五种常见方法:冒泡、插入、选择、快速排序、归并排序快速排序1、分析:(1)、首先将第一个元素的值赋给 val ,分别用low和high来指向第一个元素和最后一个元素。(2)、首先让high位置的值和value进行对比。如果high位置的值大于value,则high向前移动一个位置后(high--),再继续和value的值进行对比。此过程中保持low位置不动。...原创 2019-09-05 11:07:13 · 673 阅读 · 0 评论 -
树
一、树的基本知识1、定义:有且只有一个称为根的结点,有若干个互不相交的子树,这些子树本身也是树。2、其组成:树是由节点和边组成 每个节点只有一个父节点,但可以有多个子节点 根节点没有父节点 深度:从根节点到最底层节点的层数,根节点为第一层。 叶子节点:没有子节点的节点 度:子节点的个数3、树的分类一般树:任意一个节点的子节点个数都不受限制。 二叉树:任意一个节点的...原创 2019-09-03 17:26:47 · 985 阅读 · 0 评论 -
数据结构
一、数据结构1、数据结构的概念:数据结构是研究数据的存储和数据的操作。2、数据的存储分为两部分:个体的存储 个体关系的存储 数据存储最核心的就是个体关系的存储,个体的存储几乎可以忽略不计。二、逻辑结构和物理结构在计算机的数据结构上有逻辑结构和物理结构1、逻辑结构:线性、非线性(1)线性:数组 链表 栈和队列是一种特殊的线性结构(2)非线性树 图2、物...原创 2019-09-03 16:12:39 · 114 阅读 · 0 评论 -
递归及应用
一、递归基本知识1、递归:指直接或间接的不断调用自身2、函数调用自身的具体过程如下:【注】:函数调用自身和调用其它的函数在计算机上是没有任何区别的。3、递归需要满足如下三个条件递归必须要有一个明确的中止条件 该函数所处理的数据规模必须是在递减 这个转化必须是可解的4、循环和递归的区别(1)、递归:易于理解 速度慢 存储空间大(浪费大量的存储空间)(2)...原创 2019-09-03 15:59:04 · 185 阅读 · 0 评论 -
队列数据结构
一、队列:一种可以实现先进先出的存储结构1、队列可以分为:链式队列(动态):用链表来实现 静态队列(顺序队列):用数组来实现(静态队列通常都必须是循环队列)2、链式队列结构如下图:3、静态队列一般都是循环队列,其目的是为了能重复使用数组的内存,减少内存的浪费。 (1)、如下图所示的循环队列: front = 0 ,rear = 5 ,此时循环队列已满。如下图的队列...原创 2019-09-02 21:48:51 · 512 阅读 · 0 评论 -
栈数据结构
栈是一种先进后出的数据结构,可以分为:顺序栈和链式栈一、顺序栈1、其结构如下图所示:2、栈的基本操作,只有如下的五个push( ) 入栈 pop( ) 出栈 empty( ) 是否为空 top( ) 返回栈顶元素 size( ) 返回栈中元素个数 swap() 交换#include<iostream>#include<stack>...原创 2019-08-27 17:08:38 · 2254 阅读 · 0 评论 -
链表
一、链表简介1、链表的每个结点包含两个部分:一个是数据域,用来存放待处理的数据 一个是指针域,用来存储下一个结点的地址2、链表是一系列的结点通过指针进行连接起来的,其在内存地址中的位置并不连续,结点可以动态创建。链表不支持随机访问结点,只能从头结点逐个开始访问、遍历。3、链表的每个结点是同一种结构体类型,结点的定义如下:【注】指针域中的指针是指向下一个结点的,所以指针的类型就是...原创 2019-08-27 13:46:10 · 376 阅读 · 0 评论 -
算法复杂度
一、大 O 记号是来对算法复杂度进行表示的标记【注】 其并不是精确的值,而只是反应了算法的复杂程度和趋势。1、度量算法的标准:度量某一算法执行次数(即执行时间):T(n) 度量算法执行时,占用的内存空间多少:S(n) —————— 一般不考虑该项二、常见算法的复杂度:1、级数(1)、级数(2)、幂方级数(3)、几何级数(4)、收敛级数...原创 2019-08-27 05:49:21 · 157 阅读 · 0 评论