<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[sunchenkai的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/sunchenkai</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; sunchenkai]]></copyright><item><title><![CDATA[gcc13.2 编译安装]]></title><link>https://blog.youkuaiyun.com/sunchenkai/article/details/132713356</link><guid>https://blog.youkuaiyun.com/sunchenkai/article/details/132713356</guid><author>sunchenkai</author><pubDate>Wed, 06 Sep 2023 13:36:06 +0800</pubDate><description><![CDATA[GCC13.2]]></description><category></category></item><item><title><![CDATA[C++使用OpenSSL库中的ECDSA签名验签]]></title><link>https://blog.youkuaiyun.com/sunchenkai/article/details/127285848</link><guid>https://blog.youkuaiyun.com/sunchenkai/article/details/127285848</guid><author>sunchenkai</author><pubDate>Wed, 12 Oct 2022 17:29:33 +0800</pubDate><description><![CDATA[C++ OPENSSL ECDSA]]></description><category></category></item><item><title><![CDATA[C++数据结构与算法之二叉树后序遍历]]></title><link>https://blog.youkuaiyun.com/sunchenkai/article/details/117461739</link><guid>https://blog.youkuaiyun.com/sunchenkai/article/details/117461739</guid><author>sunchenkai</author><pubDate>Wed, 02 Jun 2021 10:29:26 +0800</pubDate><description><![CDATA[二叉树后序遍历C++二叉树后序遍历基本思想C++二叉树后序遍历代码
C++二叉树后序遍历基本思想
创建两个栈stk和res，先把根节点压入栈中，循环stk不为空，创建一个tmp节点赋值为栈顶元素，弹栈，把tmp压入另一个栈，如果tmp的左孩子不为空，就把左孩子压入栈，如果tmp的右孩子不为空就把后孩子压入栈，循环输出res栈顶元素，输出一个弹一个，循环条件res不能为空
C++二叉树后序遍历代码
void postOrderSortCure(TreeNode* root)
{
	if(root!=NULL)]]></description><category></category></item><item><title><![CDATA[C++数据结构与算法之二叉树中序遍历]]></title><link>https://blog.youkuaiyun.com/sunchenkai/article/details/117461376</link><guid>https://blog.youkuaiyun.com/sunchenkai/article/details/117461376</guid><author>sunchenkai</author><pubDate>Wed, 02 Jun 2021 10:16:44 +0800</pubDate><description><![CDATA[二叉树中序遍历C++二叉树中序遍历基本思想C++二叉树中序遍历代码
C++二叉树中序遍历基本思想
申请一个栈stk，再申请一个变量cur，初始值让它等于头节点
先把cur压入栈中对cur节点的整颗子树来说，依次把左边界压入栈中，不断重复直到cur为空
从stk弹出一个节点记作node，打印node的值，并让cur=node.right。重复第二个步骤，当stk为空并且cur为空时，结束循环。
C++二叉树中序遍历代码
//递归写法
void inorderSortCure(TreeNode* root)
{]]></description><category></category></item><item><title><![CDATA[C++数据结构与算法之二叉树前序遍历]]></title><link>https://blog.youkuaiyun.com/sunchenkai/article/details/117456243</link><guid>https://blog.youkuaiyun.com/sunchenkai/article/details/117456243</guid><author>sunchenkai</author><pubDate>Tue, 01 Jun 2021 22:49:54 +0800</pubDate><description><![CDATA[二叉树前序遍历C++二叉树前序遍历基本思想C++二叉树前序遍历代码
C++二叉树前序遍历基本思想
申请一个新的栈为stk，将头节点压入栈中
每次从stk中弹出栈顶节点，记为cur，然后打印cur的值
当cur的右孩子不为空，压入栈中
当cur的左孩子不为空，压入栈中
不断重复，直到stk为空
C++二叉树前序遍历代码
struct TreeNode
{
	int val;
	TreeNode* left;
	TreeNode* right;
	TreeNode(int val,TreeNode *left,]]></description><category></category></item><item><title><![CDATA[C++数据结构与算法之二叉树层次遍历]]></title><link>https://blog.youkuaiyun.com/sunchenkai/article/details/117431534</link><guid>https://blog.youkuaiyun.com/sunchenkai/article/details/117431534</guid><author>sunchenkai</author><pubDate>Mon, 31 May 2021 22:38:32 +0800</pubDate><description><![CDATA[二叉树层次遍历C++层次遍历思想C++层次遍历代码
C++层次遍历思想
第一步：将根节点放入队列
第二步：每次从队列中弹出一个节点，记为node
第三步：看这个node有没有左孩子，如果有左孩子就把左孩子放到队列中，如果node有右孩子就把右孩子放到队列中。
第四步：重复步骤二和步骤三，直到队列为空
C++层次遍历代码
struct TreeNode
{
	int val;
	TreeNode* left;
	TreeNode* right;
	TreeNode(int val,TreeNode *left]]></description><category></category></item><item><title><![CDATA[C++数据结构与算法之排序——归并排序]]></title><link>https://blog.youkuaiyun.com/sunchenkai/article/details/117394832</link><guid>https://blog.youkuaiyun.com/sunchenkai/article/details/117394832</guid><author>sunchenkai</author><pubDate>Sun, 30 May 2021 10:07:53 +0800</pubDate><description><![CDATA[C++归并排序归并排序基本思想归并排序代码
归并排序基本思想
思想：将两个有序的数组合并成一个有序的数组
第一步：将数组进行分解，当分解成单个元素为一组的时候才是组内有序的
第二步：将两两有序的数组进行合并，将两个有序数组合并成一个有序数组。重复第二步，直至排序完成。
合并的步骤：先申请两数组合并后那么大小的空间，然后将两个排好序的数组逐一进行比较，往申请空间里面放。
归并排序代码
void merge(vector&lt;int&gt; &amp;vec,int l,int mid ,int r)
{
	]]></description><category></category></item><item><title><![CDATA[C++数据结构与算法之堆排序]]></title><link>https://blog.youkuaiyun.com/sunchenkai/article/details/117394533</link><guid>https://blog.youkuaiyun.com/sunchenkai/article/details/117394533</guid><author>sunchenkai</author><pubDate>Sun, 30 May 2021 09:31:36 +0800</pubDate><description><![CDATA[C++堆排序堆排序基本思想堆排序的代码
堆排序基本思想
第一步：我们将待排序数组想象成一个堆结构，并将其调整成最大堆
（堆结构：左孩子的下标是2i+1，右孩子下标为2i+2）
（最大堆的特点，在这个堆结构中，任何一个父节点的值都大于其子节点的值）
第二步：将堆顶元素与待排序数组（假设待排序的数据数量为nums）最后一个元素进行交换，swap(a[0],a[nums-1])
第三步：待排序的数据量减少一个，即num–；将待排序数组重新调整成最大堆结构，重复第二步,循环n-1次，将所有数据排序完成
初始化堆（将]]></description><category></category></item><item><title><![CDATA[C++数据结构与算法之排序——快速排序]]></title><link>https://blog.youkuaiyun.com/sunchenkai/article/details/117364371</link><guid>https://blog.youkuaiyun.com/sunchenkai/article/details/117364371</guid><author>sunchenkai</author><pubDate>Fri, 28 May 2021 15:43:46 +0800</pubDate><description><![CDATA[C++快速排序快速排序基本思想快速排序的代码
快速排序基本思想
第一步：找一个基准值（这里选取待排序数组中最左边的值）然后将待排序数组分成三个部分
第一部分：数据全小于基准值
第二部分：数据全等于基准值
第三部分：数据全大于基准值
第二步：将第一部分和第三部分分别进行第一步处理，直到i&gt;=j
快速排序的代码
pair&lt;int,int&gt; quickHolandFlag(int a[],int l,int r)
{
	int i =l-1,j=r+1,index =l;
	int tmp = ]]></description><category></category></item><item><title><![CDATA[C++数据结构与算法之排序——桶排序]]></title><link>https://blog.youkuaiyun.com/sunchenkai/article/details/117363573</link><guid>https://blog.youkuaiyun.com/sunchenkai/article/details/117363573</guid><author>sunchenkai</author><pubDate>Fri, 28 May 2021 15:18:22 +0800</pubDate><description><![CDATA[C++桶排序桶排序的基本思想桶排序的代码
桶排序的基本思想
原来：把数值记作桶号，遍历整个数组，将相应的桶进行计数
第一步：遍历原数组，找到最大值max，并且申请max+1个桶，初始化为0（下标从0到max），即vector bucket(max+1,0);
第二步：遍历原数组，找到每个数值对应的桶号，并对桶计数++，即bucket[vec[i]]++；
第三步：遍历桶数组，看对应的桶内计数为几就取出几个下标值，放到原数组，即while(bucker[i]–) vec[index++]=bucket[i];]]></description><category></category></item><item><title><![CDATA[C++数据结构与算法之排序——希尔排序]]></title><link>https://blog.youkuaiyun.com/sunchenkai/article/details/117362882</link><guid>https://blog.youkuaiyun.com/sunchenkai/article/details/117362882</guid><author>sunchenkai</author><pubDate>Fri, 28 May 2021 15:01:52 +0800</pubDate><description><![CDATA[C++希尔排序希尔排序基本思想希尔排序代码
希尔排序基本思想
先分组在进行排序，在对组内进行直接插入排序
组内先设置一个初始值gap=n/2；将数列分成gap组
第0组的数值为：a[0],a[0+gap],a[0+2gap] …直到下标越界
第1组的数值为：a[1],a[1+gap],a[1+2gap]…直到下标越界
…
第gap-1组的数值为:a[gap-1],a[gap-1+gap],a[gap-1+2*gap]…直到下标越界
每组进行直接插入排序
然后将gap缩进为gap/=2;重复第一步，当gap缩]]></description><category></category></item><item><title><![CDATA[C++数据结构与算法之排序——直接插入排序]]></title><link>https://blog.youkuaiyun.com/sunchenkai/article/details/117279047</link><guid>https://blog.youkuaiyun.com/sunchenkai/article/details/117279047</guid><author>sunchenkai</author><pubDate>Wed, 26 May 2021 09:02:20 +0800</pubDate><description><![CDATA[C++直接插入排序 直接插入排序思想直接插入排序代码
直接插入排序思想
将数组分为有序区和无序区，每次从无序区中取出一个元素，插入到有序区适当的位置，一开始有序区只有一个数，无序区有n-1个数。
每遍历一次，有序区中元素增加一个，无序区中元素减少一个，完成排序。
下图为直接插入排序流程图：

直接插入排序代码
void straightSort(int *arr,int len)
{
	int tmp = 0;
	int j = 0;
	for(int i = 1;i&lt;len;i++)
	{//i表示]]></description><category></category></item><item><title><![CDATA[C++数据结构与算法之排序——选择排序]]></title><link>https://blog.youkuaiyun.com/sunchenkai/article/details/117278804</link><guid>https://blog.youkuaiyun.com/sunchenkai/article/details/117278804</guid><author>sunchenkai</author><pubDate>Wed, 26 May 2021 08:48:55 +0800</pubDate><description><![CDATA[C++选择排序选择排序基本思想选择排序代码：
选择排序基本思想
第一步：选择找到数组中最大值，并且记录最大值的下标maxIndex，将最大值和数组最后一个值交换，即swap(a[maxIndex],a[n-1])
第二步：在剩下的待排序数组中，重新找到最大值，重复第一步骤，swap(a[maxIndex],a[n-2]);循环操作，直到数组有序为止
选择排序代码：
void selectSort(vector&lt;int&gt; &amp;vec)
{
	int maxIndex = 0;
	int n ]]></description><category></category></item><item><title><![CDATA[C++数据结构与算法之排序——冒泡排序]]></title><link>https://blog.youkuaiyun.com/sunchenkai/article/details/117277852</link><guid>https://blog.youkuaiyun.com/sunchenkai/article/details/117277852</guid><author>sunchenkai</author><pubDate>Wed, 26 May 2021 08:36:20 +0800</pubDate><description><![CDATA[C++冒泡排序冒泡排序基本思想：冒泡排序代码：
冒泡排序基本思想：
第一步：两两比较，将最大的数放到数组最后一个位置（既下标n-1的位置）
第二步：采用同样的方法，再次遍历，将第二大的数放到数组倒数第二的位置（既下标为n-2的位置）。以此类推，直到数组有序。
下图为冒泡排序流程图，描述了冒泡排序思想的第一步骤，每遍历一次确定一个值的位置，如下图所示：

冒泡排序代码：
void bubbleSort(vector&lt;int&gt; &amp;vec)
{
	for(int i = vec.size()-]]></description><category></category></item></channel></rss>