数据结构排序

【leetCode】——合并两个有序数组 LeetCode算法题——合并两个有序数组(双指针的应用) 阅读详情

直接插入排序:

算法流程

对待排序序列中的每个元素,按大小插入到答案序列中

                答案序列          数组

开始时: [                 ]  [ 3,5,4,6,7]

第一步插入3,答案序列是空,直接放入

[3] [5,4,6,7]

第二步插入5,应该插入在3的后面

[3,5] [4,6,7]

第三步插入4,应该插入在3后面,5的前面

[3,4,5] [6,7]

对于a[i],应该插入到答案数组的第一个大于等于a[i]的位置,插入完成后即排序完成

时间复杂度:

考虑两个极端情况:

1.待排序数组是非递减的,也就是每次插入只需插入到最后一个位置,有n个数插入,插入a[i]时顺序查找插入位置的遍历长度i-1,时间复杂度是每个元素查找长度之和\sum_{i=0}^{n-1}i=\frac{1}{2}n(n-1)\Rightarrow O(n^2)

2.待排序数组是非递增的,也就是每次插入需要插入到答案数组的第一个位置,此时查找长度为0,但需要将答案数组向后移动一个位置,对于插入a[i]时,移动次数应该是之前已经插入到序列的所有数,也就是需要移动i-1个元素,那么时间复杂度同上是\sum_{i=0}^{n-1}i=\frac{1}{2}n(n-1)\Rightarrow O(n^2)

#include<iostream>
#include<stack>
#include<queue>
#include<map>
#include<set>
#include<ctype.h>
#include<algorithm>
#include<string>
#include<vector>
#include<cmath>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<deque>
using namespace std;

int n,a[100005],ans[100005];

int main()
{
 	cin>>n;
 	for(int i=1;i<=n;i++) scanf("%d",&a[i]);
 	ans[1]=a[1];
 	for(int i=2;i<=n;i++)
 	{
 		//在插入i时,ans数组元素数应该是i-1
 		int pos;
 		for(pos=1;pos<=i-1&&ans[pos]<a[i];pos++);//找这个位置
 		if(pos!=i)
 		{
 			for(int j=i;j>=pos+1;j--) ans[j]=ans[j-1];
		}
		ans[pos]=a[i];
		for(int j=1;j<=i;j++) printf("%d ",ans[j]);
		for(int j=i+1;j<=n;j++) printf("%d ",a[j]);
		cout<<endl;
	}
 	return 0;
}

二分查找插入排序

对直接插入排序有一个地方可以优化,那就是在答案数组中寻找插入位置,因为答案数组一定是有序的,所以可以二分查找第一个大于等于a[i]的位置

二分函数:lower_bound(l,r,k),在指针l与r之间的区域[l,r)(注意是左闭右开)寻找第一个大于等于k的位置,返回指针,如果查找失败,返回r指针。这个函数定义在头文件#include<algorithm>内

那么在长n的a序列中查找大于等于k的第一个位置的下标就是:

lower_bound(a,a+n,k)-a

时间复杂度:

同样考虑两种极端情况:

1.待排序数组是非递减的,那么不需要迁移,需要查找插入位置,二分查找时间复杂度O(log_{2}n),所以总时间复杂度是\sum_{i=0}^{n-1}log_{2}i<nlog_{2}n\Rightarrow O(nlogn)

2.待排序数组是非递增的,那么不需要查找位置,需要迁移,时间复杂度同上是O(n^2)

所以总时间复杂度大约是O(nlogn)到O(n^2)

#include<iostream>
#include<stack>
#include<queue>
#include<map>
#include<set>
#include<ctype.h>
#include<algorithm>
#include<string>
#include<vector>
#include<cmath>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<deque>
using namespace std;

int n,a[100005],ans[100005];

int main()
{
	cin>>n;
	for(int i=1;i<=n;i++) scanf("%d",&a[i]);
	ans[1]=a[1];//第一个数直接插入到空答案序列即可
	for(int i=2;i<=n;i++)
	{
		//在插入i时,ans数组元素数应该是i-1
		int pos=lower_bound(ans+1,ans+1+i-1,a[i])-ans;
		if(pos!=i)//如果找到的位置不是右指针所指的下标,那么需要迁移找到的位置之后的所有元素,即把[pos,i-1]区间后移一位
		{
			for(int j=i;j>=pos+1;j--) ans[j]=ans[j-1];//迁移
		}
		ans[pos]=a[i];
		for(int j=1;j<=i;j++) printf("%d ",ans[j]);
		for(int j=i+1;j<=n;j++) printf("%d ",a[j]);
		cout<<endl;
	}
 	return 0;
}

希尔排序:

算法流程:

初始化一个增量d=n/2,在数组中查找所有距离为d的有序对,如果不满足排序规则就交换,需要注意的是,在交换完i与i+d位置后,因为i位置更新了,所以需要重新考虑i-d这个位置(如果存在),这个步骤是建议递归处理的

时间复杂度:

大约是O(nlogn),具体为O(n^{1.3})到O(n^{2})

#include<iostream>
#include<stack>
#include<queue>
#include<map>
#include<set>
#include<ctype.h>
#include<algorithm>
#include<string>
#include<vector>
#include<cmath>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<deque>
using namespace std;

int n,a[100005];

void swap_(int i,int j)
{
	swap(a[i],a[j]);//swap(a,b)函数,定义在#include<algorithm>,交换a,b两数的值
	if(2*i-j>=1&&a[2*i-j]>a[i]) swap_(2*i-j,i);//完成这次交换后,看一下i-d是否存在,并且不满足前小后大,是的话就递归交换
	//因为调用这个函数的时候是swap_(i,i+d),所以(函数内)j-i==(主函数)d,所以i-d=i-(j-i)=2*i-j
}

int main()
{
 	cin>>n;
 	for(int i=1;i<=n;i++) scanf("%d",&a[i]);
 	for(int d=n>>1;d;d>>=1)//初始化d为n/2,也就是n右移一位,每次循环都是d=d/2,也就是d>>=1
 	{
 		for(int i=1;i<=n-d;i++)//查找所有距离为d的有序对
 		{
 			if(a[i]>a[i+d]) swap_(i,i+d);//如果不满足排序规则,即a[i]<=a[j](i<j),那么就交换
		}
		for(int i=1;i<=n;i++) printf("%d ",a[i]);
		cout<<endl;
	}
 	return 0;
}

冒泡排序

算法流程:

反复遍历数组,遇到不符合排序规则的相邻有序对就交换

那么到底需要遍历多少遍呢?

考虑一个极端(最坏)情况,有一个序列中最小的数出现在了序列最右边,那么从最右到最左需要交换n-1次,由于每一次遍历中右边的数最多往左交换一个,因此我们只要遍历n-1次,就一定能完全排序数组

那我们是不是一定要遍历n-1次呢?答案是不需要的,因为只要在某一次遍历中没有发生交换,数组就一定排好序了,n-1次只是能保证一定排好序的最小次数而已。

时间复杂度:

在一定能排序的前提下讨论:遍历n-1次,那么操作次数就是n(n-1)\Rightarrow O(n^2)

如果序列已经排好序,那么只需遍历一次就可以结束,操作数=  n\Rightarrow O(n)

#include<iostream>
#include<stack>
#include<queue>
#include<map>
#include<set>
#include<ctype.h>
#include<algorithm>
#include<string>
#include<vector>
#include<cmath>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<deque>
using namespace std;

int n,a[100005];

bool sort()
{
	bool flag=true;//默认值是true,就是假设没有数要交换,如果发生了交换,就成为false
	for(int i=1;i<n;i++)
	{
		if(a[i]>a[i+1])
		{
			swap(a[i],a[i+1]);
			flag=0;
		}
	}
	for(int i=1;i<=n;i++) printf("%d ",a[i]);
	cout<<endl;
	return flag;//返回true就让程序中止了,因为已经有序了
}

int main()
{
	cin>>n;
	for(int i=1;i<=n;i++) scanf("%d",&a[i]);
	for(int i=1;i<=n-1;i++) if(sort()) return 0;
 	return 0;
}

快速排序:

算法流程:

在待排序的数组中选取一个标准值pivot,将小于pivot的所有值放在pivot的左边,大于pivot的值放在右边,假设pivot最后在k位置,我们只需要同样的方法排序k的左右两边数组就可以了

在一般的实现里,一般选用待排序数组的最左边的值作为pivot,在下面的实现也是如此

时间复杂度:

考虑两个pivot最后放置位置的极端情况:

1.如果pivot出现在序列两端,那么每次都只递归排序剩下的元素,每次排序需要序列长度的操作数,所以总操作数为\sum_{i=1}^{n}i=\frac{1}{2}n(n+1)\Rightarrow O(n^2)

由于我们选择的时排序前的最左边数,最后出现在序列两端意味着pivot是最值,所以,当选取到的pivot是最值时,得到最差时间复杂度,经典例子是对有序序列快速排序

2.如果pivot出现在正中间,那么意味着每次二分序列,并且每次二分完指针移动的距离都是序列长度,所以时间复杂度O(nlogn)

#include<iostream>
#include<stack>
#include<queue>
#include<map>
#include<set>
#include<ctype.h>
#include<algorithm>
#include<string>
#include<vector>
#include<cmath>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<deque>
using namespace std;

int n,a[100005];

void q_sort(int l,int r)
{
	int lastl=l,lastr=r,pivot=a[l];//lastl,lastr用来保存最初的l,r,有什么用到递归的时候就会明白。pivot就是标准值
	while(l<r)
	{
		//因为我们选取的是最左边的值为pivot,所以最左边的位置是没有数的,就需要在右侧找一个不符条件的放在l的位置
		while(a[r]>=pivot&&l<r) r--;//在l<r的合法条件下寻找第一个小于pivot的数
		if(l<r) a[l++]=a[r];//如果找到右侧第一个小于pivot的数后,l,r仍合法,那我们就把找到的数放在l的位置,并且让l++
		while(a[l]<=pivot&&l<r) l++;
		if(l<r) a[r--]=a[l];
	}
	a[l]=pivot;//左右指针重合的位置就放置pivot,因为这个位置左边都是小于等于pivot的,右边都是大于等于pivot的
	for(int i=1;i<=n;i++) printf("%d%c",a[i],i==n?'\n':' ');
	if(l-1>lastl) q_sort(lastl,l-1);//如果pivot左边的区间长度大于1,那么就递归排序左边的,下面的同理
	if(lastr>r+1) q_sort(r+1,lastr);//lastl,lastr的作用就是保存开始的边界,以便递归
}

int main()
{
 	cin>>n;
 	for(int i=1;i<=n;i++) scanf("%d",&a[i]);
 	q_sort(1,n);
 	return 0;
}

选择排序:

算法流程:

查找第i小的数,放在第i位

由于算法是这样,那么第i小的数只会出现在[i,n] (这句话是对在排序i位置的时候而言的,因为比他小的数一定都在之前被选择走了)

oj好像不用打印最后一次的结果,所以在打印前记得判断一下

时间复杂度:

排序i位置时,需要遍历[i,n]查找最小值,所以操作次数大约为\sum_{i=1}^{n}i=\frac{1}{2}n(n+1),时间复杂度为O(n^2)

#include<iostream>
#include<stack>
#include<queue>
#include<map>
#include<set>
#include<ctype.h>
#include<algorithm>
#include<string>
#include<vector>
#include<cmath>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<deque>
using namespace std;

int n,a[100005];

int main()
{
 	cin>>n;
 	for(int i=1;i<=n;i++) scanf("%d",&a[i]);
 	for(int i=1;i<=n;i++)//查找第i位放的数,也就是第i小的数
 	{
 		int minv=0x3fffffff,minp;//用minv记录最小值,minp记录最小值的位置
 		//需要一对变量的原因是我们最后关心的不仅是值,还有位置
 		for(int j=i;j<=n;j++)//遍历区间[i,n]找最小值
 		{
 			if(a[j]<minv)
 			{
 				minv=a[j];
 				minp=j;
			}
		}
		swap(a[i],a[minp]);//交换当前元素和最小值元素
		if(i<n)
		{
			for(int j=1;j<=n;j++) printf("%d ",a[j]);
			cout<<endl;
		}
	}
 	return 0;
}

【自考】数据结构之排序 入排序:将记录分为有序和无序区,让无序区中的记录依次插入到有序区中,并保持有序。 交换排序:两两比较待排序记录,当记录之间键值出现逆序时,则互换位置。 选择排序:每次从待排序记录中选取键值最小或最大的记录放在适当的位置。 归并排序:将两个或两个以上的有序表合并成一个有序 阅读详情

相关推荐

【数据结构 — 排序 — 选择排序】

数据结构 — 排序 — 选择排序

qq_73900397的博客 4586

插入排序(C语言实现)

【题目描述】将若干个整数(不多于30个),使用插入排序法按从小到大顺序排【输入说明】输入包括两行,第一行一个数字n表示需要排序的数字的个数,第二行有n个待排序的数字【输出说明】输出只有一行n个数字,显示排序结果。每个数字之间有一个半角空格【输入样例】55 4 3 2 1【输出样例】1 2 3 4 5代码实现#include int i;void Insertion_Sort(int *a,int n){ int b,m=0; for(b=0;b...

weixin_62788105的博客 601

【数据结构排序算法系列】数据结构八大排序算法

排序算法在计算机应用中随处可见,如Windows操作系统的文件管理中会自动对用户创建的文件按照一定的规则排序(这个规则用户可以自定义,默认按照文件名排序)因此熟练掌握各种排序算法是非常重要的,本博客将对数据结构中常见的八大排序算法进行详细的讲解。 写在前面的话:首先要明白在学习同类型的排序算法时,一定要明白任何相同领域存在的东西一定是竞争之后的结果,所以对于相同类型的排序之所以能够存在多种被人熟

(* ̄︶ ̄) 10万+

实现给定数组的快速排序

快速排序是众多排序方法中的很重要的一种方法,如它的名字一样,它的特点就是快,时间复杂度仅为O(nlogn)。 快速排序的算法思想: 先确定一个枢轴(一般为第一个元素),然后两个下标i和j分别指向这组元素的头和尾,下标j从后往前走,每当找到一个比枢轴元素小的,当前元素就与枢轴元素交换位置,然后下标i开始从前往后走,每当找到一个比枢轴元素大的,当前元素就与枢轴元素交换位置,然后下标j继续往前走,执行相应操作。总之,j走一次,i走一次(这里的一次指的是 :走到可以交换的位置停下来算一次),注意刚开始一定是先从后

q1430186623的博客 1857

数据结构之九大排序(JAVA)

最近面临实习面试,由于自己准备投开发岗,据了解在面试中对于数据结构的考察是很重要的,其中对于查找、排序的算法考察尤为重要,所以又重回当年学习的数据结构好好复习。参考:《数据结构》 严蔚敏版、《考研数据结构》及各排序总结博客,整理出适合自己的排序总结以供参考 http://www.open-open.com/lib/view/open1453126714683.html http://www

Aka丶的博客 9467

【数据结构】常见七大排序总结

常见七大排序概念算法总结

四季轮换叶,一路招摇胜 7369

C语言——快速排序

C语言实现快速排序

qq_59599094的博客 750

数据结构-各种排序完整示例程序

数据结构课程中的各种排序示例完整程序,用C语言实现 各种示例包括:希尔排序、选择排序、插入排序、冒泡排序、快速排序等

7-3 对整型数据排序 (15 分)

** 7-3 对整型数据排序 (15 分) ** 分别使用插入排序、选择排序及冒泡排序三种算法对整型数据进行排序(升序)。 输入格式: 第一行输入待排序数组长度; 第二行输入待排序数据(均为整型数据),数据之间使用一个或多个空格分隔; 第三行输入所选择的算法,其中: 插入排序 选择排序 冒泡排序 主方法使用如下代码: public class Main { public static void main(String[] args) { java.util.Scanner input = n

lylkp的博客 743

解密m3u8视频合并:从猫抓插件到本地文件修改全流程

本文详细解析了m3u8视频合并的全流程,特别针对加密视频片段提供了解决方案。从使用猫抓插件捕获m3u8文件地址,到利用N_m3u8DL-CLI工具自动下载、解密并合并ts片段,手把手教你处理AES-128加密等常见问题,最终生成完整的本地MP4文件,适合需要备份或处理流媒体资源的用户。

weixin_29290947的博客 1359

【教程】安装 iterm2 打造漂亮且高性能的 mac 终端

最近电脑重新安装系统,开发环境和软件都需要重新安装和配置,其中终端工具是必不可少的,正好利用这个机会,介绍一下 macOS 终端神器 iTerm2 的安装和配置,并推荐几款好用的插件和工具。在IT领域中,工具的选择和使用对于开发者和运维人员来说至关重要。而在众多终端模拟器中,ITerm2无疑是一个出色的选择,希望本篇的文章能对你有些帮助,感兴趣的朋友可以登录官网查看官方文档。我是刘大大,持续分享AI相关领域的知识和工具,喜欢点点关注。

刘大大AI的博客 3399

数据结构——排序

数据结构,排序

2303_78442132的博客 2590

量化平台深度测评:聚宽 / 米筐 / 迅投 QMT 对比分析

本文对比测评国内主流量化交易平台聚宽、米筐和迅投QMT,从回测性能、实盘稳定性和高级功能三方面展开分析。测试显示:聚宽在低频策略回测中效率最高(128秒),米筐次之;迅投QMT凭借C++直连架构实现最低延迟(150ms)和最高订单撤销成功率(98.5%)。平台特色方面,QMT的智能拆单算法可减少25%滑点损失,聚宽的因子库支持版本控制和缓存复用。建议低频策略选聚宽,高频交易选QMT,团队协作优先考虑聚宽。测试数据均来自合规实盘环境,建议根据策略特性进行试用验证。

tianchi2009123的博客 7368

数据结构—排序

在数据结构中,排序是一种将数据元素重新排列的过程,通常是为了使它们按照特定的顺序(如升序或降序)组织起来。排序在计算机科学中非常重要,下面是一些常见的数据结构排序方法和它们的特点。

2302_81258662的博客 1579

YOLOv11 改进 - 检测头 | Detect_LSCD轻量共享卷积检测头:轻量化设计破解计算瓶颈,增强复杂场景目标感知能力

本文介绍了基于群归一化(GroupNorm)和共享卷积的轻量化检测头LSCD,并将其集成进YOLOv11。LSCD检测头充分利用了GroupNorm和共享卷积的优势,在保持特征信息有效融合的同时,减少计算量和运算复杂度。我们将LSCD的代码集成到YOLOv11检测头中,并在tasks文件中进行注册。实验证明,YOLOv11-LSCD在目标检测任务中取得了良好的效果。

魔改工程师的博客 2385

【26美赛B题】2026美赛数学建模(MCM/ICM)思路解析及代码分享

2026美赛数学建模B题解析与备赛指南:本文针对B题"数据+预测+决策优化"的特点,提出通用建模路线图,包含数据预处理、特征工程、预测模型构建、策略优化和稳定性验证等关键环节。提供赛题拆解方法、Python/Matlab双实现方案、AI辅助建模技巧及论文写作模板。适用于2026美赛B题参赛者及其他数学建模竞赛选手,帮助掌握从数据到决策的闭环建模流程,特别强调逻辑严谨性和结果可视化呈现。订阅者可获取历年真题解析和持续更新的备赛资源。

一键难忘的博客 2109

数据结构中的所有排序

所有数据结构中的基本排序,你都能在这里找到

2301_77213660的博客 1769

【电机驱动与运动控制】期末重点问题集合

问题1 梯形曲线和S形曲线各自的特点和区别,比较梯形和S形曲线位置、速度、加速度、加加速度的区别。 问题2 总惯量的计算包含哪几个部分? 哪几个部分需要进行折算? 在齿轮箱的输出侧(2号轴)总惯量需要折算到齿轮箱的输入侧(1号轴) 为什么需要折算? 齿轮箱比的存在使2号轴的转速和电机的转速不同 问题3 指出每个部分的名称。 每个部分的功能。 主磁极的励磁绕组:绝大部分直流电机都是由励磁绕组通以直流电建立主磁场; - 电枢铁心:在两个主磁极内表面之间,由硅钢片叠成的圆

【人工智障 | 计算鸡视觉 | 机器孩】 5703

数据结构中常见的几种排序算法

    数据结构中常见的几种排序算法 快速排序 目录 数据结构中常见的几种排序算法 快速排序 插入排序 希尔排序 归并排序 堆排序 选择排序 冒泡排序 基数排序 快速排序 基本思想: 基准分割法  a) 通过一趟排序将要排序的数据分割成独立的两部分其中一部分所有的数据要比另外的一部分数据都要小  b) 按照此方法对这两部分数据进行快速排序  案例:3 6...

qq_39380590的博客 1万+

R语言机器学习算法实战系列(十五)随机森林生存预后模型+SHAP值 (Random Survival Forest + SHAP)

本教程运用随机森林生存分析筛选与患者生存状态显著相关特征。该方法借随机森林这一强大机器学习算法,构建多棵决策树并集成结果,以提高生存分析准确性,识别关键生物标志物。接着,利用选定特征构建风险得分,将多个特征转化为单一数值,量化患者风险水平。之后,依据风险得分将患者分为高、低风险亚型,为临床治疗提供个性化指导。最后,通过分析时间依赖的 ROC 曲线评估模型长期预测能力。此曲线计算不同阈值下的真正例率与假正例率,在多个时间点评估,全面展现模型长期稳定性与准确性。。并且增加了SHAP值评估特征重要性

专注生信领域 2620

【系统架构设计师】二十六、论文写作要点

论文写作概述:时间所需120分钟;题目可四选一,必有一题考察软件架构,总有一款适合你;考察形式是机试(开心,再也不用担心字丑了),约2500字。

帅次的博客 4597

数据结构:七种排序及总结

归并排序的思想是通过二分找中间值,[left,中间值] ,[中间值+1,right]两个序列再二分,直到left>=中间值,然后通过递归返回原来的函数栈帧进行排序,因为只有logn个函数栈帧,每次栈帧内最坏排n个数据。序保持不变,即在原序列中,r[i]=r[j],且r[i]在r[j]之前,而在排序后的序列中,r[i]仍在r[j]之前,则称这种排。从i=0开始遍历,每次i之前的序列都是有序的,通过判断当前i的值能够在i之前哪个位置,找到后直接插入,第一个循环是n,第二个循环最坏是n,所以是最大n^2。

jjj_mmm的博客 2309

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

数据结构内排序题库

网络课课后题 1、已知一组元素的排序码为(46,74,16,53,14,26,40,38,86,65,27,34),利用直接插入排序的方法(第一个数字不用插入),写出第四次向前面有序表插入一个元素后的排列结果。 解析 未插入元素前,排列结果为46 74 16 53 14 26 40 38 86 65 27 34 第一次插入74,结果为 46 74 16 53 14 26 40...

闲狗的博客 1万+

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

数据结构-排序

介绍了数据结构插入排序、希尔排序、选择排序、堆排序、冒泡排序、快速排序、归并排序、计数排序,并对其介绍思想、特性、时间和空间复杂度,同时用c语言实现该算法的

wrrtx的博客 1545

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

数据结构之排序

本文系统总结了常见排序算法,包括插入排序(直接插入、折半插入、希尔)、交换排序(冒泡、快速)、选择排序(简单选择、堆)、归并排序和基数排序。详细分析了每种算法的思想、实现代码、时间/空间复杂度及特点(稳定性、适用场景等)。时间复杂度从O(n²)到O(nlogn)不等,空间复杂度多为O(1)。各类排序各有优劣:插入排序适合近有序数据,快速排序效率高但不稳定,堆排序适合大数据但实现复杂,基数排序无需比较但需额外空间。文章通过代码示例和复杂度对比,为数据结构学习提供了全面的排序算法参考资料。

L_142190687的博客 1337

学习笔记—数据结构—排序

目录排序的概念及运用常见的运用衡量排序标准常见排序的实现算法插入排序直接插入排序代码实现复杂度希尔排序代码实现复杂度选择排序直接选择排序​编辑代码实现复杂度堆排序代码实现复杂度交换排序冒泡排序代码实现复杂度快速排序hoare版本代码实现挖坑法代码实现lomuto前后指针​编辑代码实现非递归版本代码实现复杂度归并排序代码实现复杂度非比较排序计数排序代码实现复杂度总结 复杂度 希尔排序 希尔排序是一种基于插入排序的算法,它通过引入增量序列,采取分组排序策略:将大数组分为若干个子序列,对每个子序

2401_83231468的博客 2816
下一篇: Codeforces 1696D Permutation Graph
stdforces
博客等级 码龄4年 9粉丝 136原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值