
数据结构与算法学习
数据结构与算法学习
努力努力再努力F_
这个作者很懒,什么都没留下…
展开
-
排序算法总结
前言排序算法是《数据结构与算法》中最基本的算法之一。排序算法可以分为内部排序和外部排序。内部排序是数据记录在内存中进行排序。而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存。常见的内部排序算法有:插入排序、希尔排序、选择排序、冒泡排序、归并排序、快速排序、堆排序、基数排序等。参考资料:算法 3:最常用的排序——快速排序这或许是东半球分析十大排序算法最好的一篇文章「多图警告」手撕排序算法...原创 2020-07-08 19:56:25 · 179 阅读 · 0 评论 -
排序算法学习系列-选择排序
选择排序简介选择排序是最简单直观的一种算法,基本思想为每一趟从待排序的数据元素中选择最小(或最大)的一个元素作为首元素,直到所有元素排完为止,简单选择排序是不稳定排序,平均时间复杂度为O(n2)O(n^2)O(n2)。实现思路主要思路:在算法实现时,每一趟确定最小元素的时候会通过不断地比较交换来使得首位置为当前最小,交换是个比较耗时的操作。其实我们很容易发现,在还未完全确定当前最小元素之前,这些交换都是无意义的。我们可以通过设置一个变量min,每一次比较仅存储较小元素的数组下标,当轮循环结束之后,那原创 2020-07-07 21:16:16 · 189 阅读 · 0 评论 -
排序算法学习系列-插入排序
插入排序简介直接插入排序基本思想是每一步将一个待排序的记录,插入到前面已经排好序的有序序列中去,直到插完所有元素为止。简单选择排序是稳定排序,平均时间复杂度为O(n2)O(n^2)O(n2)。简单插入排序在最好情况下,需要比较n-1次,无需交换元素,时间复杂度为O(n); 在最坏情况下,时间复杂度依然为O(n2)。代码/** * 插入排序 * * @param arr**/#include <vector>using namespace std;template<原创 2020-07-07 21:25:37 · 206 阅读 · 0 评论 -
算法学习-前言
前言本专栏将开始学习算法,算法一般可以用递归和循环来做,要求能够手写代码,包括以下二分法归并排序快速排序回溯法动态规划贪婪算法原创 2019-12-26 08:32:10 · 129 阅读 · 0 评论 -
排序算法学习系列-快速排序
前言排序算法是《数据结构与算法》中最基本的算法之一。排序算法可以分为内部排序和外部排序。内部排序是数据记录在内存中进行排序。而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存。常见的内部排序算法有:插入排序、希尔排序、选择排序、冒泡排序、归并排序、快速排序、堆排序、基数排序等。参考资料:算法 3:最常用的排序——快速排序这或许是东半球分析十大排序算法最...原创 2019-12-30 09:03:21 · 426 阅读 · 0 评论 -
排序算法学习系列-冒泡排序
冒泡排序作用: 最常用的排序算法,对数组内元素进行排序步骤1. 比较相邻的元素。如果第一个比第二个大,就交换他们两个。2. 对每一对相邻元素做同样的工作,执行完毕后,找到第一个最大值。3. 重复以上的步骤,每次比较次数-1,直到不需要比较注意两个循环参数第一个:排序总轮数等于数组中元素个数减一;第二个:每轮比较次数等于数组中元素个数减一再减去第几轮次;void sort_maopao(int aa[], int len){ cout << "冒泡排序前" <<原创 2020-06-20 22:10:57 · 268 阅读 · 0 评论 -
数据结构-树
文章目录一、树基础知识二叉树满二叉树完全二叉树二叉树查找树二、树的基本操作树的遍历三、树参考资料一、树基础知识树是一种递归非线性数据结构,是由n(n >=0)个结点组成的有限集合。 其中一个节点被指定为树的根,而其余节点被称为根的子节点。树的节点个数为0的时候叫做空树。树的一些基本术语:根节点 :根节点是没有任何父节点的节点。子树: 如果根节点不为空,则根节点下面的树称为根...原创 2019-11-01 20:43:14 · 253 阅读 · 0 评论 -
时间复杂度与空间复杂度
文章目录一、时间复杂度(1)高低阶项比较(2)定义:(3)例子(4)计算方法二、空间复杂度一、时间复杂度(1)高低阶项比较O(1)也被称为常数阶(2)定义:时间复杂度可以表示某个算法的运行时间的趋势与问题规模的关系,大致地度量算法效率的好坏。(3)例子(4)...原创 2019-11-01 20:40:51 · 288 阅读 · 0 评论 -
数据结构学习-堆
文章目录一、堆栈基础知识利用后缀表达式来理解堆栈二、堆栈的基本操作三、线性表代码实现-参考资料(c++)一、堆栈基础知识堆栈是利用后缀表达式来理解堆栈二、堆栈的基本操作三、线性表代码实现-参考资料(c++)...原创 2019-10-15 09:50:13 · 171 阅读 · 1 评论 -
数据结构学习-线性表
文章目录一、线性表基础知识二、线性表的基本操作线性表的顺序存储线性表的链式存储三、线性表代码实现-参考资料(c++)一、线性表基础知识表是由同类型的数据元素构成有序序列的线性结构。表中元素个数称为表的长度,没有元素时称为空表,表的第一个位置称为表头,最后一个位置称为表尾。二、线性表的基本操作线性表可以由抽象数据类型来表示,包括数据对象集和操作集。线性表有两种实现方法,第一种为链表(链式存储...原创 2019-10-08 16:19:32 · 222 阅读 · 0 评论 -
数据结构学习-数组和指针
文章目录写在前面一、数组和指针基础知识(1)数组(2)指针二、数组和指针的基本操作(1)数组访问方式(2)指向指针的指针三、数组代码实现(c++)四、参考资料写在前面现代c++程序应尽量使用vector和迭代器类型,而避免使用低级的数组和指针(因为使用数组的程序更容易出错而且难以调试),只有在强调速度的时候才会在类实现的内部使用数组和指针。一、数组和指针基础知识(1)数组数组可以存储一组...原创 2019-10-08 14:42:03 · 309 阅读 · 0 评论 -
数据结构学习-栈
文章目录一、栈基础知识二、栈基本操作三、栈的分类四、栈代码实现(c++)一、栈基础知识栈是典型的先进先出的线性数据结构。有两个特点栈中数据是按照先进后出方式进出队列的。栈只允许在栈顶进行删除,插入操作。允许元素插入与删除的一端称为栈顶,另一端称为栈底。二、栈基本操作stack.empty(); //如果栈为空则返回true, 否则返回false;stack.si...原创 2019-10-08 09:32:55 · 390 阅读 · 0 评论 -
数据结构学习-队列
文章目录一、队列基础知识二、队列基本操作三、队列代码实现一、队列基础知识队列是典型的先进先出的线性数据结构。有两个特点队列中数据是按照先进先出方式进出队列的。队列只允许在**“队首"进行删除操作,而在"队尾”**进行插入操作。二、队列基本操作c++队列常用六种函数:C++队列中的常用函数入队,如例:q.push(x); 将x 接到队列的末端。出队,如例:q.pop(); 弹出...原创 2019-10-07 21:32:13 · 193 阅读 · 0 评论