
数据结构与算法
文章平均质量分 57
数据结构与算法:八大经典排序算法、数组链表、栈与队列等
东城青年
非宁静无以致远
微信号:15221816820
展开
-
算法的时间与空间复杂度
算法是指用来操作数据、解决程序问题的一种方法。对于同一问题,使用不同的算法,也许最终结果是一样的,但在过程中消耗的资源和时间却会有很大的区别。那我们该如何去衡量不同算法之间的优劣呢?主要还是从算法所占用的【时间】和【空间】两个维度去考量。因此,评价一个算法的效率主要是看它的时间复杂度和空间复杂度情况。然而,有的时候时间和空间却又是鱼和熊掌不可兼得,那我们就需要从从中去取一个平衡点。下面我来分别介绍一下【时间复杂度】和【空间复杂度】的计算方式。原创 2024-05-22 15:36:53 · 718 阅读 · 0 评论 -
堆排序方法
开门见山,本文讲述堆排序。就我自身对于排序的了解来看,其实堆排序是诸多排序中最难写的,光是理解起来都有点费劲,本文旨在于用通俗易懂的话,把堆排序娓娓道来。下面,开始!1:堆毫无疑问,排序两个字没必要去死磕,这里的重点,在于排序的方式,堆排序,就是以堆的形式去排序,毫无疑问,了解堆很重要。那么,什么是堆呢?这里,必须引入一个完全二叉树的概念,然后过渡到堆的概念。上图,...原创 2019-09-18 09:45:06 · 183 阅读 · 1 评论 -
归并排序法
我们需要将两个已经有序的子序列合并成一个有序序列,比如上图中的最后一次合并,要将[4,5,7,8]和[1,2,3,6]两个已经有序的子序列,合并为最终序列[1,2,3,4,5,6,7,8],来看下实现步骤。归并排序算法有两个基本操作,一是分,也就是把原数组划分成两个子数组的过程,另一个是治,它将两个有序数组合并成一个更大的有序数组。归并排序法是典型的分治算法应用,1946年由冯.诺伊曼发明。原创 2024-06-03 16:44:57 · 411 阅读 · 0 评论 -
快速排序法
快速排序(QuickSort)是对冒泡排序的一种改进,快速排序由C.A.R.Hoare在1960年提出。原创 2024-05-31 18:30:02 · 497 阅读 · 0 评论 -
计数排序法
当输入的元素是n个0到k之间的整数时,它的运行时间复杂度是O(n+k)。计数排序不是比较排序,它的速度快于任何比较排序的算法。由于用来计数的数组A的长度取决于待排数组中数据的范围(最大值-最小值+1),这使得计数排序对于数据范围很大的数组,需要大量时间和内存。计数排序的核心在于将输入数据转化为键存储在额外开辟的数组空间中。作为一种线性时间复杂度的排序,计数排序要求输入的数据必须是有确定范围的整数。原创 2024-05-28 10:47:09 · 311 阅读 · 0 评论 -
希尔排序法
gap=2,从a[2]开始,a[2]和a[0]进行插入排序,a[3]和a[1]插入排序,a[4]和a[2]、a[0]插入排序......上面gap=2,即5,14,18,27,68为一组;13,20,36,39,51为一组。可以发现左边都是较小的数据,右边都是较大的数据,更方便把分成的每一个组进行插入排序。为什么 要采取上面分组的方法呢(gap),换一种方法也可以吗?原创 2024-05-28 15:25:57 · 455 阅读 · 0 评论 -
插入排序法
插入排序相对冒泡排序而言是一种较为快捷方便的排序算法。冒泡排序:http://blog.youkuaiyun.com/llzk_/article/details/51547923插入排序原理很简单,讲一组数据分成两组,我分别将其称为有序组与待插入组。每次从待插入组中取出一个元素,与有序组的元素进行比较,并找到合适的位置,将该元素插到有序组当中。就这样,每次插入一个元素,有序组增加,待插入组减少。直到待...原创 2019-11-06 10:12:55 · 348 阅读 · 1 评论 -
冒泡排序法
【代码】冒泡排序法。原创 2024-05-27 15:39:04 · 147 阅读 · 0 评论 -
选择排序法
【代码】选择排序法。原创 2024-05-27 16:34:00 · 340 阅读 · 0 评论 -
二叉排序树的查找与删除
构造一颗二叉排序树的目的,其实并不是为了排序,而是为了提高查找和插入删除关键字的速度。不管怎么说,在一个有序数据集上的查找,速度总是要快于无序数据集的,而二叉排序树这种非线性的结构,也有利于插入和删除的实现。二叉排序树的查找:先查找其根节点,如果根节点的数据与data值相等,则返回该根节点;否则, 如果data值大于根节点,则查询其右子树;如果小于根节点,则查询其左子树。pn...原创 2019-03-21 14:21:23 · 529 阅读 · 0 评论 -
二叉排序树的构建与遍历
树形结构是一类重要的非线性数据结构,其中以树和二叉树最为常用。二叉树的链式存储结构是一类重要的数据结构。二叉树是每个结点最多只有两个子树的有序树。二叉树常被用作二叉查找树和二叉堆或是二叉排序树。二叉树的子树有左右之分,次序不能颠倒。二叉树的第i层至多有2^(i -1)个结点;深度为k的二叉树至多有2^k-1个结点;对任何一棵二叉树,如果其叶子结点数为n0,度为2的结点数为n2,则n0 = n...原创 2019-03-20 21:08:30 · 1211 阅读 · 0 评论 -
栈与队列详解
数组与链表是数据存储的基本方法。成员访问中,数组可以随机的访问成员,链表通过遍历可以去找到需要的数据单元。栈与队列是两种特殊的数据成员管理方式。它们本身的数据存放方式也是数组或者链表。栈:FILO(先进后出)。只允许在栈顶添加元素和删除元素(出栈和入栈) 队列:FIFO(先进先出)。在队首删除元素,在队尾添加元素(出队和入队)判断什么时候栈为空栈底加一个特殊标记 记录栈底的...原创 2019-03-17 13:16:39 · 430 阅读 · 0 评论 -
数组与链表
数据存放在内存中,在内存中的组织形式只有两种:衡量一个算法是否优越:时间复杂度(耗费时间) 空间复杂度(占用内存)1、数组的管理int a[100];//就是在内存中申请100个连续的sizeof(int)空间int *p = (int *)malloc(100xsizeof(int));//在堆空间中申请100个连续的int空间对空间进行访问:得到第10...原创 2019-03-16 14:50:49 · 2286 阅读 · 1 评论