![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构
幽萌之雨
上班族
展开
-
八大排序之选择排序
选择排序概述: 上边的概念可能还能比较难理解,没关系,接下来我们会详细讲解: 对于选择排序,就是每次选择一个较小的数来排序。我们可以将一个杂乱的数列分成两部分,左半部分是有序的数,右半部分是无序的数,我们需要做的就是从右边无序的数列中找出一个最小的树放在左半部分中。因为每次都是从右半部分选出最小的数来移到左半部分,所以左半部分始终是有序的。 图解:上图只是便于理解,在具体实现时,我们不可能再重新开辟一块空间来存放有序序列。那么如何解决呢?我们希望的是数列从左向右开始慢慢有序,那么我们如果要将找出的原创 2022-04-06 19:04:47 · 297 阅读 · 0 评论 -
两个栈实现一个队
两个栈实现一个队原创 2022-07-17 11:19:08 · 196 阅读 · 0 评论 -
链队的实现
链队原创 2022-07-17 11:16:55 · 157 阅读 · 0 评论 -
顺序队的实现
顺序队原创 2022-07-17 11:15:50 · 61 阅读 · 0 评论 -
链栈的实现
链栈原创 2022-07-17 11:14:23 · 105 阅读 · 0 评论 -
顺序栈的实现
顺序栈原创 2022-07-17 11:13:08 · 94 阅读 · 0 评论 -
链表练习题
链表原创 2022-07-17 10:58:47 · 77 阅读 · 0 评论 -
双循环链表
双循环链表原创 2022-07-17 10:53:40 · 145 阅读 · 0 评论 -
单循环链表
单循环链表原创 2022-07-17 10:51:51 · 707 阅读 · 0 评论 -
双链表的实现
双链表原创 2022-07-17 10:50:25 · 105 阅读 · 0 评论 -
单链表的实现
单链表原创 2022-07-17 10:47:54 · 74 阅读 · 0 评论 -
顺序表的实现
顺序表原创 2022-07-16 11:29:02 · 73 阅读 · 0 评论 -
八大排序之基数排序
基数排序又称桶排序,是按位数一位一位的分类好,放在单独的空间中,再进行排序,排序好之后再将所有的数据收集出来。然后再按下一位重新进行分类,再排序,再收集...直到序列中的最大数的位数到达最高位时,最后一次收集,就直接有序了。 概念可能比较难理解,上图解: 解释:数是哪个位上的,就是为了使这个范围内的数有序。例如:432 456 478这三个数,第一次就是为了使2 6 8这三个个位数有序,第二次是为了32 56 78这三个十位数有序,第三次就是为了使432 456 478这三个百位数有序。 代码实.原创 2022-04-07 23:24:51 · 255 阅读 · 0 评论 -
八大排序之堆排序
堆排序引论:既然是堆排序,那么我们必须知道堆是什么? 堆是具有以下性质的完全二叉树:每个节点的值都大于等于左右孩子节点的值,称为大顶堆;或者每个节点的值都小于或等于其左右孩子节点的值,称为小顶堆。 根据堆的定义可知,根节点一定是堆中所有节点最大(小)着。较大(小)的节点靠近节点(但也不绝对)如图: 如果将上图按照层次遍历存入数组,那么一定满足下面的关系: 堆排序算法 堆排序就是利用堆(假设利用大顶堆)进行排序的方法。它的基本思想是,将待排序的序列构造成一个大顶堆。此时,整个序列的最大.原创 2022-04-07 20:55:13 · 180 阅读 · 0 评论 -
八大排序之归并排序
归并排序引论: 归并排序就是利用归并的思想实现的排序方法。它的原理是假设初始序列含有n个记录,则可以看成是有n个有序的子序列,没个子序列的长度为1,然后两两归并,得到[n/2]([x]表示不小于x的最小整数)个长度为2或1的有序子序列;然后两两归并,....,如此重复,直至得到一个长度为n的有序序列为止,这种方法称为2路归并排序。 一般我们最先想到的是采用递归的方法解决,那么我们需要直到递推和回归,递推的是划分之后的乱序数列,回归的是有序的数列,递推的过程可以看做一棵正的二叉树,回归的.原创 2022-04-07 17:01:54 · 1162 阅读 · 0 评论 -
八大排序之希尔排序
希尔排序引论: 简单来说就是,希尔排序其实是一个特殊的直接插入排序,特殊之处在于为了降低时间复杂度,我们需要在调用直接插入排序之前,先想办法让它基本有序,而这个办法就是将相距某个增量的记录组成一个子序列,相当于多次调用直接插入排序,每一次的增量都保持互素,并且最后一个增量一定为1,为1才能保证其完全有序。 如果了解直接插入排序的话,希尔排序就是很容易理解的(前两次调用直接插入排序是为了让数列基本有序,最后一次和直接插入排序完全一致): void Shell(int* ar, int n, i原创 2022-04-06 23:22:00 · 141 阅读 · 0 评论 -
八大排序之直接插入排序
描述:直接插入排序的基本操作是将一个数插入到已经排序好的有序表中,从而得到一个新的、记录数增1的有序表。插入排序与选择排序还是比较相似的,不同的是,这个排序不是从右半部分选择最小的,而是直接选择右边第一个数据,除此之外,还有一点不同的是,选择排序左半部分不用去排序,只需找到右边最小元素最后交换即可有序,而插入排序则不同,它每次都要比较,直到找到合适位置。 图解: 代码实现: int InsertSort(int *ar,int n) { assert(ar != NULL); if (ar原创 2022-04-06 22:19:08 · 132 阅读 · 0 评论