算法学习之--进阶排序算法(时间复杂度O(nlogn))

排序算法(二):时间复杂度为O(nlogn)的排序算法 一、希尔排序(实际上很少用到,了解即可) 1、算法步骤 将待排序数组按照一定的间隔进行排序,如此时排序间隔为gap:则从index=gap处的元素开始排序;对于index = i的元素,每次和当前index - gap处的元素进行比较,直到符合插入条件;然后继续比较index = i++的元素,直到数组末尾,完成当前间隔的排序 逐渐缩小间隔进行下一轮排序 最后一轮时,取间隔为 1,也就相当于直接使用插入排序。但这时经过前面的「宏观调控」,数组已经基本有序了,所以此时的插入排序只需进行少量交换便可完成 阅读详情

1.归并排序

  基本思想:不断的将数据进行二分(逻辑上的二分,即将数组元素索引分块,并不是真的把数组内存进行二分),当二分到只有一个数组元素时开始归并,数组的每一个元素由其二分后数组的两个元素进行比较确定:

 首先进行二分:

二分到第三层数组中仅有一个元素(即数组有序),然后开始向上进行归并:第二层左边的数组 [ 0 ] 位置元素由其二分后数组元素比较得出,显然应该是3,那么 [ 1 ]位置就是6,同理第二层右边数组归并后是1,4。再次向上归并,第一层数组[0]位置由其二分数组【3,6】【1,4】的第一个元素比较确定,3>1所以[ 0 ]位置元素是1,现在由【3,6】【4】确定[1]位置元素, 3<4所以[1]位置是3,现在由【6】【4】确定[ 3 ]位置元素。。。。

下面是代码实现:

template<class T>
static void mergSort (T arr[],int size)
{
    int l = 0;
    int r = size-1;
    p_mergeSort(arr,l,r);
}

template<typename T>
static void p_mergeSort(T arr[],int l,int r)
{
    if(l>=r)	//递归结束的标记,即二分后数组中只有一个元素
        return ;
    int mid = (l+r)/2;
    p_mergeSort(arr,l,mid);
    p_mergeSort(arr,mid+1,r);
    p_merge(arr,l,mid,r);
}

//归并,使用两个已经有序的二分数组确定上一级数组的顺序
template<typename T>
static void p_merge(T arr[],int l,int mid,int r)
{
	T *cpyArr = new T[r-l+1];
	for(int i=0;i<r-l+1;i++)
		cpyArr[i] = arr[l+i];
	//i,j分别表示二分后的数组当前参与比较的元素的索引(即二分后数组中的最小值)
	int i=l,j=mid+1;
	for(int k=l;k<=r;k++)
	{
		//当前数组某一二分后的数组元素全部比较完之后,i(j)任然会加1,所以先进行判断下标
		if(i>mid)
		{
			arr[k] = cpyArr[j-l];
			j++;
		}
		else if(j>r)
		{
			arr[k] = cpyArr[i-l];
			i++;
		}else if(cpyArr[i-l]<cpyArr[j-l])	//判断当前数组元素应该是哪个二分数组中的最小值
		{
			arr[k]=cpyArr[i-l];
			i++;
		}
		else
		{
			arr[k] = cpyArr[j-l];
			j++;
		}
	}
	delete cpyArr;
}

归并排序优化

  再次整理归并排序的基本思想:首先将数组逐级二分,二分到只有一个元素时二分后的数组就是有序的,然后使用两个有序的二分子数组归并(即合成一个有序数组),那么归并后的数组元素一定是两个二分数组当前最小值的其中之一。

上述代码中归并的过程可以从两个方面来优化:1.在两个二分数组都是有序的情况下,如果索引靠前的数组的最大值小于另一数组的最小值,那么该数组本身就是有序的。2.当数据元素个数小于某一阈值的情况下,O(n^2)算法的效率更高,即可以提前结束归并的递归,不再是二分后元素个数为1开始归并,而是数据元素小于15(确定最合适的阈值还需要大量思考,有兴趣可以深入研究)时使用插入排序将二分数组进行排序(为什么使用插入排序,参考我上一篇博客https://blog.youkuaiyun.com/j_oop/article/details/106380136)。下面给出代码:

template<typename T>
static void p_mergeSortPlus(T arr[],int l,int r)
{
	if(r-l<=15)	//当数组元素少于某一值时,O(n^2)算法的排序效率更高,提前结束归并使用插入排序
	{
		insertSort2(arr,l,r);
		return ;
	}
	int mid = (l+r)/2;
	p_mergeSortPlus(arr,l,mid);
	p_mergeSortPlus(arr,mid+1,r);
	if(arr[mid]>arr[mid+1])	//如果二分后的两个数组本身就有序的那么不用再进行处理
		p_merge(arr,l,mid,r);
}

值得注意的是:判断索引靠前的数组的最大值是否小于另一数组的最小值本身就需要开销,在实际使用中是否加入这一优化要视具体情况甄别。

2.快速排序:

基本思想:每次遍历将数组分成两部分:存在索引k,k之前的元素小于arr[k],k之后的元素大于arr[k],然后再将两个子数组分别迭代。

template<class T>
static void quickSort(T arr[],int size)
{
	p_quickSort(arr,0,size-1);
}

template<class T>
static void p_quickSort(T arr[],int l,int r)
{
        if(l>=r)
	    return ;
	int k = p_partion(arr,l,r);
	p_quickSort(arr,l,k-1);
	p_quickSort(arr,k+1,r);
}

template<typename T>
static int p_partion(T arr[],int l,int r)
{
	int k = l+1;    
	T val = arr[l];  //使用第一个元素作为比较的对象
	for(int i = l+1;i<=r;i++)
	{
		if(arr[i]<val)
		{
			swap(arr[i],arr[k]);
			k++;
		}
	}
	swap(arr[l],arr[k-1]);
	return k-1;
}

快速排序优化

1.和归并排序一样,当数组元素少于15时采用插入排序;2.上诉代码存在一个问题,当数组时接近有序数组时时间复杂度接近O(n^2),因为相当于每次遍历将数组分成了一个长度为0和长度为n两个子数组。解决方法:每次用于比较的数组元素不从第一个索引处取值,而是从数组随机位置取值,代码如下:

template<class T>
static void p_quickSort(T arr[],int l,int r)
{
	//优化1:数组元素少于15时使用插入排序
	/*if(l>=r)
	return ;*/
	if(r-l<=15)
	{
		insertSort2(arr,l,r);
		return ;
	}
	int k = p_partion(arr,l,r);
	p_quickSort(arr,l,k-1);
	p_quickSort(arr,k+1,r);
}

template<typename T>
static int p_partion(T arr[],int l,int r)
{
	int k = l+1;
	//优化2:不使用数组的开始元素作为比较对象,使用随机位置元素,避免了对接近有序数组进行排序时效率降低
	swap(arr[l],arr[l+rand()%(r-l+1)]);
	T val = arr[l];
	for(int i = l+1;i<=r;i++)
	{
		if(arr[i]<val)
		{
			swap(arr[i],arr[k]);
			k++;
		}
	}
	swap(arr[l],arr[k-1]);
	return k-1;
}

双路快速排序:

上面的优化虽然解决了对接近有序数组排序时的问题,但是对于拥有大量重复元素的数组,排序后还是会出现二分的数组极度不平均,使得算法效率接近O(n^2)。要解决这个问题思路之一是:把重复元素分别放在二分后的两个数组中,即双路快速排序

基本思想:由数组两端向中间遍历,每当遇到左边的元素大于v,右边的元素小于v时,交换两者位置,这样把数组分成了<=v和>=v的两部分且两部分,再分别迭代处理两部分,代码如下:

///快速排序(双路排序):从数组两端向中间遍历将数组分成>v和小于v的两部分,解决了当数组中有大量重复元素时效率低的问题
template<class T>
static void quickSort2(T arr[],int size)
{
	p_quickSort2<int>(arr,0,size-1);
}

template<class T>
static void p_quickSort2(T arr[],int l,int r)
{
	if(r-l<=15)
	{
		insertSort2(arr,l,r);
		return ;
	}
	int k = p_partion2<T>(arr,l,r);
	p_quickSort2(arr,l,k-1);
	p_quickSort2(arr,k+1,r);
}


template<class T>
static int p_partion2(T arr[],int l,int r)
{
	swap(arr[l],arr[l+rand()%(r-l+1)]);
	T val = arr[l];
	int i = l+1;
	int j = r;
	while(true)
	{
		//注意:此处判断必须是<和>而不是<=和>=,否则当遇到大量重复元素时仍然会将数据很不平均的分成两部分,
		//使得算法效率接近O(n^2),即使这样增加了交换的次数
	        while(arr[i]<val && i<=r)
		        i++;
		while(arr[j]>val && j>= l+1)
			j--;
		if(i>j)
			break;
		swap(arr[i],arr[j]);
		i++;
		j--;
	}
	swap(arr[l],arr[j]);
	return j;
}

三路快速排序:

双路快速排序通过将重复元素分开存放在两个子数组中解决了大量重复元素的问题,还有一种更高效的思路是:从头至尾遍历数组,将数组分成>v,==v,<v三部分,并迭代>v和<v的部分

///快速排序(三路排序):从两端向中间遍历,将数组分为三部分:<v,==v,>v,再分别遍历,<v和>v的部分
template<class T>
static void quickSort3(T arr[],int size)
{
	p_quickSort3(arr,0,size-1);
}

template<typename T>
static void p_quickSort3(T arr[],int l,int r)
{
	srand(time(NULL));
	if(r-l<=15)
	{
		insertSort2(arr,l,r);
		return ;
	}
	swap(arr[l],arr[rand()%(r-l+1)+l]);
	T v = arr[l];
	int i,j,lt,gt;
	i = l+1;
	j = r;
	lt = l;
	gt = r+1;
	while(i<gt)
	{
		if(arr[i]<v)
		{
			swap(arr[i],arr[lt+1]);
			i++;
			lt++;
		}else if(arr[i]>v)
		{
			swap(arr[i],arr[gt-1]);
			gt--;
		}else{
			i++;
		}
	}
	swap(arr[l],arr[lt]);
	p_quickSort3(arr,l,lt-1);
	p_quickSort3(arr,gt,r);
}

 

十大经典排序算法 十大经典排序算法 根据算法的时间空间复杂度列出以下10种排序算法,其中蓝色底的为稳定排序,绿色底的为不稳定排序。 先谈一谈稳定性:稳定性简单来讲就是考虑排序后值相同的元素和排序前是否保持一致(如排序前a1和a2值相同,排序后仍是a1在前a2在后) 注:希尔排序时间复杂度在O(nlogn)~O(n2)之间 根据时间复杂度来划分成三小类排序 1.时间复杂度为O(n2) 1.1.冒泡排序(Bubble Sort) 简单的思想:数组中相邻元素两两比较[以左边大为例子,交换两者的位置];每一次. 阅读详情

相关推荐

中科院计算机算法设计与分析各章作业+历年习题

中科院计算机算法设计与分析各章作业+历年习题

进阶排序算法

一、希尔排序: (可以看做插入排序的升级,属于插入排序类) 基本思想: 将待排序列划分为若干组,在每一组内进行插入排序,以使整个序列基本有序,然后再对整个序列进行插入排序。 基本有序的概念:就是小的关键字基本在前面,大的基本在后面,不大不小的基本在中间。 基本有序举例:{ 2,1,3, 6,4,7, 5,8,9 } 划分为若干组的目的:减少待排序记录的个数,并使整个

kindlyde 1487

CM-GAI:基于连续介质力学与最优传输的数据生成新范式

在数据驱动的工程与科学研究中,如何利用有限的物理数据实现可靠预测是核心挑战。传统方法如深度神经网络,在数据稀缺时往往泛化能力不足且缺乏物理一致性。为解决此问题,一种融合物理原理与数据驱动的新范式应运而生。其核心思想是将数据分布的变化类比为连续介质在广义力驱动下的力学变形过程,通过最优传输理论为分布变换提供最优路径的度量。这种方法将物理规律(如质量守恒、运动方程)作为硬约束嵌入模型,确保了生成过程的物理可解释性。物理信息神经网络(PINNs)则被用作高效求解器,处理高维特征空间中的复杂控制方程。在工程实践中,

weixin_30607029的博客 608

复杂性分析初步

复杂性概念   空间复杂度:指令空间、数据空间和环境栈空间(递归)   时间复杂度:由关键操作计数决定,一般将加减乘除和比较操作看作是基本操作(约定每个基本操作所用时间都是一个单位),然后确定程序总的执行步数(不能用机器的真正运行时间作衡量标准,因为影响运行时间的因素太多,甚至还有很多未知因素)。 复杂性举例 //寻找a[0:n-1]中的最大元素 template&amp;amp;amp;lt;class T&amp;amp;amp;gt; ...

qq_33740820的博客 3665

控制台模拟前端请求实现快速刷网课时长

本教程仅用于学习前端技术和网页开发,旨在提供教育与技术指导。对于任何未经授权或违反规定的使用行为,本人不承担任何责任。注意到那个serive后面有timestamp时间戳,暗示它很可能就是每30秒汇报一次进度和播放时长的命令,我们右键——复制——复制为fetch。有的网站上的网课需要的不仅仅是进度,而是时长,所以倍速插件失效,但我们可以使用控制台命令来模拟请求实现快速刷网课时长。尝试修改即可,例如我修改time为800,然后复制粘贴到控制台执行。播放视频,等待前端请求出现,然后复制前端请求为fetch。

m0_74823408的博客 2068

【S32K】S32K144入门笔记(3) SPI(lpspi组件)

0. 引言 与第二篇can对应,第三篇本来想写lin的,毕竟都是车身上常用的总线。但是lin比较麻烦,所以先拖后一下,先把SPI记录一下。 SPI在我们的系统架构中是S32K和ADAS之间做数据传输用的,毕竟速率够高,数据量能传的比较大。 1. 准备 1.1 SPI基础知识 1.2 开发环境 1.2.1 软件开发环境 1.2.2 硬件环境 SPI 2. Demo ...

YoYo的桃子树 2万+

算法分析与设计期末总结(1)

第一章 算法引论 1、 如果存在正的常数和自然数N0,使得当N>= N0时有f(N) (1) O(f) + O(g) = O(max(f, g)) (2) O(f) + O(g) = O(f + g) (3) O(f)O(g) = O(fg) (4) 如果g(N) = O(f(N)),则O(f) + O(g) = O(f) (5) O(Cf(N)) = O(f(N)),其中C是一个正的

liujing_555的博客 1万+

ArcMap实战:用栅格计算器搞定16年NDVI趋势分析,附完整F检验流程

本文详细介绍了如何使用ArcMap的栅格计算器进行16年NDVI趋势分析,包括数据预处理、线性趋势计算和F显著性检验的全流程操作。通过实际案例和统计原理解析,帮助GIS从业者掌握植被覆盖变化的分析方法,特别适合生态评估和农业监测应用。

weixin_29251567的博客 252

算法时间复杂度渐进阶排序_Python算法中的时间复杂度

在实现算法的时候,通常会从两方面考虑算法的复杂度,即时间复杂度和空间复杂度。顾名思义,时间复杂度用于度量算法的计算工作量,空间复杂度用于度量算法占用的内存空间。本文将从时间复杂度的概念出发,结合实际代码示例分析算法的时间复杂度。渐进时间复杂度时间复杂度是算法运算所消耗的时间,因为不同大小的输入数据,算法处理所要消耗的时间是不同的,因此评估一个算运行时间是比较困难的,所以通常关注的是时间频度,即算法...

weixin_42515377的博客 2269

ESP-IDF的安装及其在VScode中编译环境的搭建

从安装目录的\Espressif\frameworks\esp-idf-v5.3.2\examples路径中拷贝一个工程到项目中,比如拷贝\get-started下的hello_world文件夹。安装时可能会遇到如下问题,提示:"e:\ssc\software\ESP-IDF\v5.3.2\Espressif\tools\idf-python\3.11.2\python.exe -m pip" is not valid. (ERROR_INVALID_PIP)接着等待安装完成即可,其他步骤同方式1。

Freddy_Ssc的博客 4373

VHDL语法学习笔记:一文掌握VHDL语法

今天给大侠带来FPGA 之 VHDL 语法学习笔记,话不多说,上货。 VHDL语法学习笔记 一、VHDL简介 1.1 VHDL 的历史 VHDL 的 英 文 全 名 是 Very-High-Speed Integrated Circuit Hardware DescriptionLanguage,诞生于 1982 年。 1987 年底,VHDL 被 IEEE 和美国国防部确认为标准硬件描述语言。自 IEEE 公布了 VHDL 的标准版本 IEEE-1076(简称 87 版)...

2万+

算法时间复杂度渐进阶排序_算法的时间复杂度

时间复杂度定义 时间频度: 一个算法执行所耗费的时间,从理论上是不能算出来的,必须上机运行测试才能知道。 一个算法花费的时间与算法中语句的执行次数成正比例,哪个算法中语句执行次数多,它花费时间就多。 一个算法中的语句执行次数称为语句频度或时间频度,表示为T(n),n表示问题的规模 时间复杂度 但有时我们想知道它变化时呈现什么规律,...

weixin_32124135的博客 4641

学Simulink——十二脉波整流电路(移相变压器)谐波抵消仿真

Y:Δ = 1:√3(若 DC 同压)— 此处同相电压故 220V(Y)=220V(Δ phase)Y(相电压=220V)、Δ(线电压=380V ⇒ 相=220V,30° 移相)可经 Lbal​=0.5mH(平衡电抗)或直接短(大 L_dc 下均流尚可)✅ 直流输出纹波频率 = 12·f_line(vs 6·f_line)直流输出 → Ldc​=50mH→Cdc​=2200µF→R=30Ω。Line‑Line RMS = 380 V(⇒ 相=220V)Vdc​≈1.35⋅380≈513V(同 6‑脉波)

xiaoheshang_123的博客 59

时间复杂度O(nlogn)的排序算法

时间复杂度O(nlogn)的排序算法有四种,分别是希尔排序,堆排序,快速排序和归并排序。这四个排序都非常重要。 希尔排序 希尔排序本质上是插入排序的优化,先对间隔较大的元素进行插入排序,完成宏观调控,然后逐步缩小间隔,最后一轮一定是间隔为 1 的排序,也就是插入排序。间隔在希尔排序中被称为「增量」,增量序列不同,希尔排序的效率也不同。 堆排序 堆排序的关键在于建堆,堆分为大顶堆和小顶堆,大顶堆中最大的元素在堆顶,小顶堆同理。 堆实际上是一颗完全二叉树,不过为了方便我们把它用数组的形式储存,储存的顺

qq_43533956的博客 1万+

基于STM32单片机设计的红外测温仪(带人脸检测)_34

当前设计的这款红外非接触式测温仪由测温硬件+上位机软件组合而成,主要用在地铁、车站入口等地方,可以准确识别人脸进行测温,如果有人温度超标会进行语音提示并且保存当前人脸照片。

8771

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

【算法】O(n2)时间复杂度和O(nlogn)排序算法的简要分析

排序算法的概述 排序算法按时间复杂度分可以分为O(n2) 和 O(logn) O(n2) 排序算法流程分析 1234.n个数已有序5.开始扫描第n+1个数n个无序序列外层遍历遍历至第n个数内层遍历 外层遍历的时间复杂度是n,内层遍历的时间复杂度也是n,由于嵌套关系,总的时间复杂度就是O(n2) 。O(n2) 排序算法都使用上述的流程,典型的代表有选择排序 、插入排序 选择排序 123value和...

chenghan_yang的博客 4125

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

四个时间复杂度为nlogn的排序算法

希尔排序、堆排序、快速排序、归并排序,四个时间复杂度为O(nlogn)的排序算法详解。

wangye135的博客 5733

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

排序算法 -- O(NlogN)篇

在众多的排序算法中,我们往往根据不同的需求选择不同的排序算法,从时间复杂度的角度考虑,排序算法中的时间复杂度O(nlogn)是一个算法复杂度较好,且常见的算法策略。本篇文章,我们来讨论排序算法中的具有O(nlogn)时间复杂度的排序算法。

qq_73684089的博客 1687

时间复杂度为 O(nlogn) 的排序算法

时间复杂度为O(nlogn)的排序算法(归并排序、快速排序),比时间复杂度O(n²)的排序算法更适合大规模数据排序。 归并排序 归并排序的核心思想 采用“分治思想”,将要排序的数组从中间分成前后两个部分,然后对前后两个部分分别进行排序,再将排序好的两部分合并在一起,这样数组就有序了。 分治是一种解决问题的思想,递归是一种编程技巧,使用递归的技巧就是,先找到递归公式和终止条件,然后将递归公式翻译成递归代码。 归并排序的递推公式和终止条件: //递归公式 merge_sort(p...r) = mege(mer

yuanwenkai 8665

排序—时间复杂度为O(nlogn)的两种排序算法

上一个排序随笔中分析了三种时间复杂度为O(n2)的排序算法,它们适合小规模数据的排序;这次我们试着分析时间复杂为O(nlogn)的排序算法,它们比较适合大规模的数据排序。 1 归并排序 1.1 原理 将待排序列划分为前后两部分,直到子序列的区间长度为1;对前后两部分分别进行排序,再将排好序的两部分合并在一起。 1.2 实现 1 static void Merge(ElemType...

weixin_30823227的博客 1390

时间复杂度为on的排序算法_排序—时间复杂度为O(nlogn)的两种排序算法

上一个排序随笔中分析了三种时间复杂度为O(n2)的排序算法,它们适合小规模数据的排序;这次我们试着分析时间复杂为O(nlogn)的排序算法,它们比较适合大规模的数据排序。1 归并排序1.1 原理将待排序列划分为前后两部分,直到子序列的区间长度为1;对前后两部分分别进行排序,再将排好序的两部分合并在一起。1.2 实现1 static void Merge(ElemType* pElem, int p...

weixin_36444661的博客 2710

O(nlogn) 是许多排序算法的典型时间复杂度

归并排序:时间复杂度为Onlog⁡nOnlogn。快速排序:平均和最优情况下,时间复杂度为Onlog⁡nOnlogn,最坏情况下为On2O(n^2)On2。堆排序:时间复杂度为Onlog⁡nOnlogn。这些排序算法的共同点是都使用了分治法策略,将数组分成多个子数组并递归地进行排序。每一层递归处理的元素数目逐渐减少,且每层合并的时间是线性的OnO(n)On,因此总体时间复杂度为Onlog⁡nOnlogn。

ZhuBin365的博客 896

排序算法之时间复杂度nlogn

动画APP讲解快排,合并排序。小白快速入门算法!

weixin_42662358的博客 4735

常见的算法时间复杂度计算分析-总结

如何计算时间复杂度: 非递归算法,通常是计算算法中循环的执行次数。那么就直接设该代码循环了k次 , 找出规模n与k的关系,得到k的级数趋近后的式子,既为时间复杂度。 2. 如果是递归算法,且只进行一次递归调用,有以一种方法是先求出深度depth,求出每一次执行的时间复杂度T ,总的时间复杂度就是depth * T(和用下面的方法原理是一样的。。) 如果递归比较复杂,那么套用递归算法的时...

wang__Ray的博客 1万+

基于比较的排序算法的最坏情况下的最优下界为什么是O(nlogn)

1.决策二叉树 回答这个问题之前我们先来玩一个猜数字的游戏,我从1到8中挑一个数字出来让你来猜,每回合你都可以问我一个问题,我的回答“是”或“不是”(1或0),那么你至少需要几个回合才能保证猜出这个数字?比较符合这个游戏精神的玩法是从自己的幸运数字(比如我的是7)开始猜起,一个一个地问我“是不是X?”,可能你的运气足够好,一个回合就能够猜对,但是在最坏的情况下可能就需要8个回合,所以你的答案应该是“至少需要8个回合”(事实上你至少只需要一次就“有可能”猜出来,但为了“保证能”猜出来,你只好委曲求全地说8),

sekever的博客 4513

时间复杂度为on的排序算法_平均时间复杂度为O(nlogn)的排序算法

本文包括1.快速排序2.归并排序3.堆排序1.快速排序快速排序的基本思想是:采取分而治之的思想,把大的拆分为小的,每一趟排序,把比选定值小的数字放在它的左边,比它大的值放在右边;重复以上步骤,直到每个区间只有一个数。此时数组已经排序完成。快速排序最重要的是partition函数功能的实现,也就是将比选定基数小的值放在他的左边,比选定基数大的值放在它的右边的功能函数。熟悉快速排序的人也许都会有自己的...

weixin_39683858的博客 1120
上一篇: C++Lambda表达式基本用法
下一篇: QT之初识QSS
angry ant
博客等级 码龄10年 9粉丝 53原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值