![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法和数据结构
GenmCai
把自己喜欢的东西做到最好!
展开
-
二叉树的非递归遍历
先序遍历非递归实现从根节点开始向左遍历,因为是先序遍历,所以每次刚遇到的节点直接输出就行,并把节点加入栈中。单次while (p != nullptr)内循环结束,就代表以开始节点为子树的左子树已经遍历完毕,接下来就需要遍历最底层子树的右节点,即从栈中取出栈顶,也就是之前遍历左子树的最后一个节点,指向其的右儿子,如果有右儿子,则开始遍历以右儿子为根节点的子树的左子树,开始循环,如果没有右儿子,也...原创 2020-01-08 14:50:49 · 210 阅读 · 0 评论 -
排序算法——快速排序
快速排序基本做法在此我们使用递归的快速排序。既然使用了递归,自然就是要解决一些重复的子任务,然后完成最后的大任务,而大任务自然就是让整个数组整体有序,那需要重复的小任务是什么呢?快排的一个个子任务,就是要在各自范围内的数组中取一个数当基准数(一般取范围内的最左边、最右边或中间的数),然后让其它的数小于基准数的放左边,大于基准数的放右边,这就是快速排序递归的子任务。整体的实现则是先对【1,...原创 2019-12-30 11:28:50 · 324 阅读 · 0 评论 -
排序算法——基数排序
基数排序基数排序(radix sort)属于“分配式排序”(distribution sort),又称“桶子法”(bucket sort)或bin sort,顾名思义,它是透过键值的部分资讯,将要排序的元素分配至“桶”中,藉以达到排序的作用,基数排序法是属于稳定性的排序,其时间复杂度为O(Nlog(r)m)O(Nlog(r)m)O(Nlog(r)m),其中r为所采取的基数,而m为堆数,在某些...原创 2019-12-29 23:44:00 · 292 阅读 · 0 评论 -
排序算法——桶排序
桶排序前言桶排序是一个在时间复杂度和空间复杂度十分极端的算法,它的时间复杂度可以达到O(N)O(N)O(N),但是空间复杂度确是十分的高,这个高取决于数组中最大的数。即最大的数是多少,就需要开辟多少的空间,当然这个说法只对于普通的桶排序来说的,对于有些使用链表或者桶排序+插入排序的做法,就各有情况了。基本做法做法其实十分的简单,程序中开辟一个笼罩数组数值范围的数组,这个数组中的每个数都被...原创 2019-12-29 18:39:10 · 152 阅读 · 0 评论 -
排序算法——希尔排序
希尔排序我对希尔排序进行学习的博客:希尔排序–简单易懂图解前言可以说是一个加强版的插入排序。在插入排序中,最好的时间复杂度是O(N)O(N)O(N)可以说是极其舒服的线性时间复杂度,而这最好的情况,就是当数组中所有的数都是有序的时候,这是O(N)O(N)O(N)的复杂度。或者稍微比较好的情况,就是数组中大部分数都是有序的时候,那么,插入排序的时间复杂度,将趋近于O(N)O(N)O(N),也...原创 2019-12-29 13:28:44 · 298 阅读 · 0 评论 -
排序算法——插入排序
插入排序拥有一个无序的数组,我们只需先拿一个数(一般拿第一个),把它先当作一个有序的数组。然后把这个无序数组中其它数分别插入到已经有序的数组中即可。代码构造思路:首先得考虑要用什么数据结构,是链表还是顺序表。在下面的代码中,我使用的是顺序表,其实就是普通的数组。然后因为我拿第一个数做为已经有序的数组,剩下只需要把其它在无序数组中的数,插入到有序数组中即可,所以外循环其实只需要循环n-1次。而每...原创 2019-12-29 10:14:32 · 172 阅读 · 0 评论 -
【数据结构】 二叉树恢复
先序 + 中序 恢复二叉树void createBinaryTree(BintreeNode *& t, char * preorder, char * inorder, int n){ if (n == 0) { t = NULL; } else { int k = 0; while (preor...原创 2019-11-20 23:21:25 · 561 阅读 · 0 评论