数据结构
Yew0
公众号:程序员的面试题
展开
-
数据结构与算法-堆排序
数据结构与算法-堆排序堆排序什么是堆堆节点的访问堆排序的基本思路堆排序的步骤分解堆排序的实现代码堆排序 堆排序是指利用堆这种数据结构所设计的一种排序算法。堆是一个近似完全二叉树的结构,并同时满足堆的性质:即子节点的键值或索引总是小于(或者大于)它的父节点,堆排序的时间复杂度为O(nlogn)。(来自维基百科)什么是堆 堆是一种特殊的完全二叉树,它的性质为:任意节点大于等于或者小于等于它的左右节点。如果任意节点大于等于它的左右节点,此堆称为最大堆;反之,任意节点小于等于它的左右节点,此堆称为最小堆。原创 2020-10-12 10:21:21 · 143 阅读 · 0 评论 -
数据结构与算法-快速排序
快速排序在实际应用中使用广泛,效果也高。快排使用的是分治策略,一组序列基于某一个基准值分成两个大小的子序列,递归排序子序列,最终得到有序的序列。快排的平均时间复杂度为O(nlogn)。算法的实现步骤:1. 在序列中挑选一个基准值,我们可以默认第一个数为基准值2. 从两边的数值跟基准值作对比,数值小的放在基准值左边,数值大的放在基准值右边3. 递归将小于基准值的子序列和大于基准值的子序列排序例子:乱序序列:4,3,9,7,5,6,8,1圆圈1:原始序列圆圈2:以第一...原创 2020-10-11 16:16:07 · 244 阅读 · 0 评论 -
数据结构与算法-归并排序
归并排序的核心思想是使用分治的策略来进行排序。分治是将大问题分成一些小问题,小问题解决后在合并在一起。 我们来看一下这一排数据:9,4,5,1,2,7,3,8,6,0。算法流程大概就是以下图所示,将数组拆分,然后每一个小数组进行排序合并。 再看一下局部的两个小数组如何进行合并的,进行合并的两个红色数组里面的数已经是有序的,上图黑色框部分申请一个临时数据,存放排序后的结果。第一行:红色左边数组跟红色右边数组进行对比,小的就放入黑色的临时数组中第二...原创 2020-08-19 19:58:43 · 182 阅读 · 0 评论 -
数据结构与算法-递归
1. 什么是递归举一个例子:大学军训的时候,一个队伍,开头的人A想知道这个队伍一共有多少人,但是每个人只能通过旁边的交流,那如何统计呢?我们可以先找出最后一个人,A可以问旁边的人B是否为最后一个人,B又问下一个人,如此类推,等到了最后一个人,再将号码返回到第一个人A,每往前一个,号码上就+1,第一个人A就知道这个队伍有多少人了。公式:g(n)=g(n-1)+1;...原创 2020-04-06 22:52:10 · 293 阅读 · 0 评论 -
数据结构与算法-数组
数组是由相同类型的元素(element)的集合所组成的数据结构,分配一块连续的内存来存储。利用元素的索引(index)可以计算出该元素对应的存储地址。(维基百科)1. 存储结构 数组是线性表数据结构,定义数组时,系统会分配一份连续的内存空间来存储一组相同的类型的数据,如int num[n] ;2. 多维数组 数组定义为一维数组、二维数组、三维数组…n维数组,...原创 2019-09-20 20:25:05 · 303 阅读 · 0 评论 -
数据结构与算法-栈
1.栈的原理 后进先出(LIFO-last in first out):最后插入的元素最先出来,是一种“操作受限”的线性表,只允许在端插入和删除数据2.栈的实现 顺序栈:用数组实现,顺序栈需要动态扩容,在初始化时需要给定一个固定大小的数组,当栈大于固定大小时需要扩充数组的大小。template<class T>class MyArrayStack...原创 2019-09-24 14:24:16 · 118 阅读 · 0 评论 -
数据结构与算法-队列
队列的操作原理是先进先出,后进后出;队列也是一种运算受限的线性表,从队列的头部出列,从队列的尾部入列。队列基本用法:empty():如果队列为空返回true,否则返回falsesize():返回队列中元素的个数pop():删除队列首元素但不返回其值front():返回队首元素的值,但不删除该元素push(x) :在队尾压入新元素 ,x为要压入的元素b...原创 2019-10-11 17:00:30 · 201 阅读 · 0 评论