![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
笔记
Hrbust-cxs
年轻且优秀、积极且颓废
展开
-
二叉树的深度优先遍历(DFS)和广度优先遍历(BFS)(c++)个人理解
二叉树的深度优先遍历(DFS)和广度优先遍历(BFS)二叉树:二叉树是一棵空树,或者是一棵由一个根节点和两棵互不相交的,分别称作根的左子树和右子树组成的非空树;左子树和右子树又同样都是二叉树。深度优先遍历:运用递归方法实现,从一个节点(最开始为root)开始,将根节点放入数组中,判断是否为叶子结点(无孩子的节点)①是叶子结点,则循环结束,数组中的元素为一条路径。②不是叶子结点,分别对该节点的左右孩子进行DFS即可。广度优先遍历:利用队列(queue)或者其他结构(stack…)都可实现。首先创建两原创 2020-11-10 21:03:58 · 613 阅读 · 0 评论 -
Sort排序专题(8)堆排序(HeapSort)(C++实现)
堆排序(HeapSort)堆排序(HeapSort):是指利用堆这种数据结构所设计的一种排序算法。堆是一个近似完全二叉树的结构,并同时满足堆积的性质:即子结点的键值或索引总是小于(或者大于)它的父节点。(大堆排序和小堆排序)堆操作:①最大堆调整(Adjust):将堆的末端子节点作调整,使得子节点永远小于父节点②创建最大堆:将堆中的所有数据重新排序③堆排序(HeapSort):移除位在第一个数据的根节点,并做最大堆调整的递归运算思想:运用最大堆调整,首先将数组看为一棵完全二叉树,arr[0]为根,原创 2020-11-09 20:18:25 · 326 阅读 · 1 评论 -
Sort排序专题(1)冒泡排序(BubbleSort)及其优化(C++实现)
冒泡排序冒泡排序基础版冒泡排序优化版注:三次异或^是将arr[j]和arr[j+1]的值交换冒泡排序基础版重复地走访过要排序的元素列,依次比较两个相邻的元素,如果顺序错误就交换二者的值,这样每次走访完一次就相对有序一次,依次循环即可,当进行至多n-1(n为数组元素个数)次即可完成排序。#include<iostream>#include<malloc.h>using namespace std;void BubbleSort(int arr[],int nLength)原创 2020-11-02 19:37:07 · 354 阅读 · 0 评论 -
Sort排序专题(7)归并排序(MergeSort)(C++实现)
归并排序(MergeSort)归并排序(Merge Sort):是建立在归并操作上的一种有效,稳定的排序算法,该算法是采用分治法的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。思想:将数组分解直到每个分组只有一个元素,在进行两两归并,得到有序序列,在将有序序列进行两两归并然后直到最终的合并得到有序序列。图解如下:①先将总序列一分为二,再将各个子序列一分为二,直到每个分组只有一个元素10,4,6,原创 2020-11-08 10:18:14 · 376 阅读 · 0 评论 -
Sort排序专题(6)希尔排序(ShellSort)(C++实现)
希尔排序(ShellSort)希尔排序:是插入排序的一种又称“缩小增量排序”,是直接插入排序算法的一种更高效的改进版本。思想:希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至 1 时,整个文件恰被分成一组,算法便终止。比较相隔较远距离(称为增量)的数,使得数移动时能跨过多个元素,则进行一次比较就可能消除多个元素交换。图解如下:①数组长度为10,size=10/2=5。arr[0]和arr[5]一组,arr[1]和arr[6原创 2020-11-07 15:59:14 · 389 阅读 · 0 评论 -
Sort排序专题(5)快速排序(QuickSort)(C++实现)
快速排序(QuickSort)快速排序:快速排序(Quicksort)是对冒泡排序的一种改进。思想:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。图解如下:①以数组第一个元素49作为参考,比他大的放到他的右边,比他小的放到他的左边。②分别对其左右两边依次进行①的操作,进行递归。③重复循环进行①②操作。代码实现#include<bit原创 2020-11-06 18:19:04 · 232 阅读 · 0 评论 -
Sort排序专题(4)计数排序(CountSort)(C++实现)
计数排序(CountSort)计数排序:计数排序基于非比较的排序算法,是一种牺牲空间换时间的算法,它的优势在于在对一定范围内的整数排序时,它的复杂度为Ο(n+k)(其中k是整数的范围),快于任何比较排序算法。当O(k)>O(n*log(n))的时候其效率反而不如基于比较的排序快。思想:找出数组中的最大最小值Max和Min,开辟一个Max-Min+1大小的空间,遍历数组将数字放入对应位置arr[i]-Min。在按顺序放回原数组即可。图解如下:①找出最小值最大值,分别是0和3,并且开辟3-0+1原创 2020-11-05 21:34:18 · 355 阅读 · 0 评论 -
Sort排序专题(3)插入排序(InsertSort)(C++实现)
插入排序(InsertSort)插入排序:插入排序是一种最简单的排序方法,它的基本思想是将一个记录插入到已经排好序的有序表中,从而一个新的、记录数增1的有序表。在其实现过程使用双层循环,外层循环对除了第一个元素之外的所有元素,内层循环对当前元素前面有序表进行待插入位置查找,并进行移动。(对于少量元素的排序,它是一个有效的算法。当元素大于1000就不再适合使用插入排序)图解如下:①第一个元素a[1]只有一个元素,一定有序。②第二个元素时,将a[2]插入到之前有序数组中的合适位置,将合适位置到a[2]原创 2020-11-04 17:02:11 · 565 阅读 · 0 评论 -
Sort排序专题(2)选择排序(SelectSort)(C++实现)
选择排序(SelectSort)选择排序(Selection sort)是一种简单直观的排序算法。工作原理:第一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后再从剩余的未排序元素中寻找到最小(大)元素,然后放到已排序的序列的末尾。以此类推,直到全部待排序的数据元素的个数为零。选择排序是不稳定的排序方法。图解如下:①从无序数组中找出最小值位置(a[3] = 5),将该位置值与无序数组(0-5)的起始位置值互换(a[0]和a[3]互换),得到a[0]有序.②从剩余无序数原创 2020-11-03 09:42:45 · 402 阅读 · 0 评论