软件编程
文章平均质量分 74
主要介绍软件相关的知识
赤电惊云
机器学习小白
展开
-
C++并发编程
第1章:C++的并发世界1.1 何谓并发最简单和最基本的并发,是指两个或更多独立的活动同时发生。并发在生活中随处可见,我们可以一边走路一边说话,也可以两只手同时作不同的动作,还有我们每个人都过着相互独立的生活——当我在游泳的时候,你可以看球赛,等等。1.1.1 计算机系统中的并发计算机领域的并发指的是在单个系统里同时执行多个独立的任务,而非顺序的进行一些活动。计算机领域里,并发不是一个新事物:很多年前,一台计算机就能通过多任务操作系统的切换功能,同时运行多个应用程序;高端多处理器服务原创 2022-04-01 22:55:10 · 5700 阅读 · 6 评论 -
堆排序详解
堆排序(Heapsort)是指利用堆这种数据结构所设计的一种排序算法。堆积是一个近似完全二叉树的结构,并同时满足堆积的性质:即子结点的键值或索引总是小于(或者大于)它的父节点。二叉树特点:每个节点最多只有2个子节点(不存在度大于2的节点)满二叉树特点:叶子节点全部都在最底层;除叶子节点外,每个节点都有左右孩子;完全二叉树特点:叶子节点全部都在最底的两层;最后一层只缺少右边的叶子节点,左边一定有叶子节点;除了最后一层,其他层的节点个数均达到最大值;最大...原创 2022-01-04 23:03:42 · 2065 阅读 · 0 评论 -
快速排序详解
快速排序基本思想: 通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。步快速排序的具体步骤:(1) 首先设定一个分界值,通过该分界值将数组分成左右两部分。(2) 将大于或等于分界值的数据集中到数组右边,小于分界值的数据集中到数组的左边。(3) 分别对左右两边的数据进行独立排序。对于左侧的数组数据,又可以取一个分界值,将该部分数据分成左右两部分...原创 2021-12-14 23:34:04 · 3249 阅读 · 0 评论 -
归并算法详解
归并算法的本质是将待排序序列分为两部分,依次对分得的两个部分再次使用归并排序,之后再对其进行合并。接下来对待排序列A[0],A[1],A[2],...,A[n-1],用归并排序思想进行排序。算法实现:1.将序列分为两部分,其中一部分对应的索引区间为[start1,end1];另一部分的对应的索引区间为[start2,end2]。其中,start1 = 0,end1 = (n - 1)/ 2 (向下取整);start2=(n - 1)/ 2 + 1,end2 = n - 1;...原创 2021-12-07 23:35:00 · 6312 阅读 · 0 评论 -
归并排序详解
转自:图解排序算法:归并排序归并排序那我们借用 cs50 里的例子,比如要把一摞卷子排好序,那用并归排序的思想是怎么做的呢? 首先把一摞卷子分成两摞; 把每一摞排好序; 把排好序的两摞再合并起来。 感觉啥都没说?那是因为上面的过程里省略了很多细节,我们一个个来看。 首先分成两摞的过程,均分,奇偶数无所谓,也就是多一个少一个的问题; 那每一摞是怎么排好序的? 答案是用同样的方法排好序。 排好序的两摞是怎么合并起来的? 这里需要借助两个指针和转载 2021-12-05 22:14:21 · 717 阅读 · 0 评论 -
希尔排序详解
希尔排序实质上是一种分组插入方法。它的基本思想是:对于n个待排序的数列,取一个小于n的整数gap(gap被称为步长)将待排序元素分成若干个组子序列,所有距离为gap的倍数的记录放在同一个组中;然后,对各组内的元素进行直接插入排序。 这一趟排序完成之后,每一个组的元素都是有序的。然后减小gap的值,并重复执行上述的分组和排序。重复这样的操作,当gap=1时,整个数列就是有序的。详细例子见下图:图中10个元素,gap = 5,则对应下标的元素组成一个组:下标为0和5组成一个组,...原创 2021-12-04 00:05:24 · 2844 阅读 · 0 评论 -
插入排序详解
插入排序思想: 一个元素表中,前面为有序表(元素按一定顺序排列),后面为无序表(元素为没有顺序的表)。将无序表中从第一个元素开始与有序表中的每个元素进行比较,直到有序表中某个元素大于它,然后将它插入该元素的位置,有序表中的从大于它的元素全部后移动一位。依次按此方法将无序表中的所有元素与有序表中的每个元素进行比较,然后插入到特定位置。 例如:元素表为1, 3, 8, 9, 2, 0, 4, 6, 5, 7。则1, 3, 8, 9为有序表;2, 0, 4, 6, 5, 7为无...原创 2021-12-01 22:46:59 · 1768 阅读 · 0 评论 -
伸展树详解及实现
转载:伸展树详解及实现 - 简单爱_wxg - 博客园我们讨论过,树的搜索效率与树的深度有关。二叉搜索树的深度可能为n,这种情况下,每次搜索的复杂度为n的量级。AVL树通过动态平衡树的深度,单次搜索的复杂度为log(n)。我们下面看伸展树(splay tree),它对于m次连续搜索操作有很好的效率。伸展树会在一次搜索后,对树进行一些特殊的操作。这些操作的理念与AVL树有些类似,即通过旋转,来改变树节点的分布,并减小树的深度。但伸展树并没有AVL的平衡要求,任意节点的左右子树可以相差任意深度。与二叉搜索树转载 2021-11-24 22:21:17 · 281 阅读 · 0 评论