常用排序算法总结(插入、冒泡、快速,堆、选择、希尔、归并)

【数据结构】排序算法(下)——插入、希尔、选择、堆、冒泡、快速、归并与计数排序 前面我们对八种不同的排序算法的基本思想和实现原理,以及它们各自的算法特性都有了一定的了解,而今天我们将要深入实现插入、希尔、选择、堆、冒泡、快速、归并与计数这八大排序算法各自的接口功能。 阅读详情

对科研中常见的几种排序方法做个总结,方便日后查看与回顾。(对本人认为比较简单易懂的排序方法过程比较简略,对比较复杂的排序方法过程就比较详细)

编程语言:C++(经过本人验证,可以正常运行)。

一、直接插入排序(稳定):

思想:“一趟一个“地将待排序记录插入到已经排好序的部分记录的适当位置中,使其成为一个新的有序序列,直到所有待排序记录全部插入完毕。

分析:

空间:仅需使用一个辅助单元。故空间复杂度为O(1);

最好情况:待排序序列已经有序,每趟操作只需比较1次和移动0次,此时,总的比较次数为n-1,总移动次数为0,故最好情况算法复杂度为O(n);

最坏情况:待排序序列按逆序排序,这时在第j趟操作中,为插入元素需要同前面的j个元素比较,移动元素的次数为j+1.此时有:总的比较次数=1+2+...+(n-1)=n(n-1)/2;总移动次数=2+3+4+...+n=(n+2)(n-1)/2,故最坏情况算法复杂度为O(n^2);

平均情况:在第j趟操作中,插入记录大约需要同前面j/2个元素比较,移动记录的次数为j/2+1次,此时总的比较次数约为n^2/4;总移动次数为n^2/4;故时间复杂度为O(n^2);

代码:

void insertSort(int *a,int low,int high)//插入排序 
{
	for(int i=low+1;i<high;i++)
	{
		if(a[i]<a[i-1])
		{
			int tmp=a[i];
			a[i]=a[i-1];
			int j=i-2;
			for(;j>=low&&tmp<a[j];j--)
				a[j+1]=a[j];
			a[j+1]=tmp;
		}
	}
}
二、二分插入排序(稳定):

思想:与直接插入类似,在找寻插入位置时采用二分查找方式;

分析:与直接插入相同,仅仅减少了元素的比较次数,并没减少元素的移动次数,因此仍为O(n^2);

代码:

void binaryInsertSort(int *a,int low,int high)//二分插入排序 
{
	for(int i=low+1;i<high;i++)
	{
		int tmp=a[i];
		int hi=i-1;
		int lo=low;
		while(lo<=hi)
		{
			int mid=(lo+hi)/2;
			if(a[mid]>tmp) hi=mid-1;
			else lo=mid+1;
		}
		for(int j=i-1;j>hi;j--)
		{
			a[j+1]=a[j];
		}
		a[hi+1]=tmp;
	}
}
三、希尔排序(不稳定):

思想:”基本有序化“可以提升插入排序的效率,将记录序列分成若干子序列,每个子序列分别进行插入排序。需要注意的是,这种子序列是由间隔为某个增量的一组数据组成,即跳跃式选择数据组。(这个解释起来比较抽象,面试中也很少问,但编程贼简单)

分析:时间复杂度:开始时增量较大,分组较多,每组的记录数目较少,当排序规模n值较小时,n和n^2的差距也较小,但随着增量d逐渐缩小,分组逐渐减小,而各组的记录数目逐渐增多,但由于已经基本有序,所以新的一趟也较快。时间复杂度与增量的设置有关,约在O(n^1.25)和O(n^1.6)之间;

代码:

void shellInsert(int *a,int low,int high,int deltaK)//希尔排序 
{
	for(int i=low+deltaK;i<high;i++)
	{
		if(a[i]<a[i-deltaK])
		{
			int tmp=a[i];
			int j=i-deltaK;
			for(;j>=low&&tmp<a[j];j=j-deltaK)
				a[j+deltaK]=a[j];
			a[j+deltaK]=tmp;
		}
	}
} 
void shellSort(int *a,int low,int high,int *delta,int m)//希尔排序 
{
	for(int k=0;k<m;k++)
	{
		shellInsert(a,low,high,delta[k]);	
	}	
}
四、冒泡排序(稳定):

思想:贼简单,对n个数进行n-1次扫描,每次扫描比较相邻两个数字,大的移到后面。这样每趟排序会把最大的数字扔到最后面;

分析:

空间:需要一个辅助单元,故空间复杂度为O(1);

最好情况:数据全部排好序,这时循环n-1次,时间复杂度为O(n),但是程序中可以设置flag,某一次未发生位置交换,程序退出;

最坏情况:数据全部逆序存放,这时循环n-1次,比较次数为n-1+n-2+...+1=n(n-1)/2;移动次数为3*(n-1+n-2+...+1)=3n(n-1)/2,时间复杂度为O(n^2);

平均情况:与直接插入分析一样,时间复杂度为O(n^2);

代码:

void bubbleSort(int *a,int low,int high)//冒泡排序普通实现 
{
	int n=high-low;
	for(int i=0;i<n-1;i++)
	{
		int flag=0;
		for(int j=0;j<n-i-1;j++)
		{
			if(a[j]>a[j+1])
			{
				flag=1;
				int tmp=a[j];
				a[j]=a[j+1];
				a[j+1]=tmp;
			}
		}
		if(flag==0)
			break;
	}
}
这里有个小插曲,有一次腾讯面试,让用递归实现冒泡,瞬间懵逼。

代码(冒泡排序的递归实现):

void bubbleSort2(int *a,int low,int high)//冒泡排序递归实现 
{
	if(high==1)
		return;
	for(int i=0;i<high-1;i++)
	{
		if(a[i]>a[i+1])
		{
			int tmp=a[i];
			a[i]=a[i+1];
			a[i+1]=tmp;
		}
	}
	bubbleSort2(a,low,--high);
} 
五、快速排序(不稳定):

思想:每次选择一个元素放置到它应该在的位置,划分原来序列为前面的数都不大于它,后面的数都不小于它;

分析(消耗的时间空间主要在递归上):

空间:最好情况,每次取到的元素刚好平分整个数组,此时空间复杂度为O(log n);最坏情况,每次取到的就是数组的最大或最小的,这种情况就是冒泡排序,此时空间复杂度为O(n),所以空间复杂度为O(log n)~O(n);

最好情况:相当于一个完全二叉树结构,即每次标准元素都把当前数组分成两个大小相等的子数组,这是分解次数等于完全二叉树的深度lb n;每次快排过程无论把数组怎样划分,全部的比较次数都接近于n-1次,所以时间复杂度为O(n lb n);

最坏情况:退化成冒泡排序,时间复杂度为O(n^2);

平均情况:时间复杂度为O(n lb n);

代码:

void quickSort(int *a,int low,int high)//快速排序 
{
	int i=low;
	int j=high-1;
	int tmp=a[low];
	while(i<j)
	{
		while(i<j&&tmp<=a[j]) j--;
		if(i<j)
		{
			a[i]=a[j];
			i++;
		}
		while(i<j&&tmp>=a[i]) i++;
		if(i<j)
		{
			a[j]=a[i];
			j--;
		}
	}
	a[i]=tmp;
	if(low<i) quickSort(a,low,i-1);
	if(i<high) quickSort(a,i+1,high);
}
六、直接选择排序(不稳定):

思想:巨简单。在每趟过程中将待排序数组最小数放到最前面。不多解释了。

分析:

空间:需要一个辅助单元,故O(1);

最好最坏情况:无论初始状态如何,都需要进行n-1+n-1+...+1=n(n-1)/2次比较,所以时间复杂度为O(n^2);

代码:

void selectSort(int *a,int low,int high)//直接选择排序 
{
	int n=high-low;
	for(int i=0;i<n-1;i++)
	{
		int min=i;
		for(int j=i+1;j<n;j++)
		{
			if(a[min]>a[j])
				min=j;	
		}	
		if(min!=i)
		{
			int tmp=a[min];
			a[min]=a[i];
			a[i]=tmp;
		}
	} 
}
七、堆排序(不稳定):

思想:把待排序的数据元素构造成一个完全二叉树结构,则每次选择出一个最大的数据元素只需比较完全二叉树的高度次,即lb n次,则排序算法的最好最坏时间复杂度均为O(n lb n);

空间:O(1);

这个比较复杂,具体的讲解可以参考博文:http://www.cnblogs.com/skywang12345/p/3602162.html

代码:

void heapAdjust(int *a,int low,int high)//堆排序,调整堆 
{
	int tmp=a[low];
	for(int j=2*low+1;j<high;j=j*2+1)
	{
		if(j<high-1&&a[j]<a[j+1]) j++;
		if(tmp>=a[j]) break;
		a[low]=a[j];
		a[j]=tmp;
		low=j;
	}
	//a[low]=tmp;
}
void heapSort(int *a,int high)//堆排序 
{
	for(int i=(high)/2-1;i>=0;i--)
		heapAdjust(a,i,high);

	for(int i=high-1;i>0;i--)
	{		
		int tmp=a[0];
		a[0]=a[i];
		a[i]=tmp;
		heapAdjust(a,0,i);
	}		
} 
八、归并排序(稳定):

思想:将若干个已经排好序的子序列合并成一个有序的序列。

分析:

时间:归并的次数约为lb n,任何一次的归并比较次数约为n-1,所以最好最坏时间复杂度均为O(n lb n);
空间:需要一个与原数组大小一样的辅助数组,故空间复杂度为O(n).

代码:

void merge(int *a,int p,int q,int r)//一次归并算法 
{
	int n1=q-p+1;
	int n2=r-q;
	int *L=new int[n1+1];
	int *R=new int[n2+1];
	for(int i=0;i<n1;i++)
	{
		L[i]=a[p+i];
	}
	for(int j=0;j<n2;j++)
	{
		R[j]=a[q+j+1];
	}
	L[n1]=1000000;
	R[n2]=1000000;
	for(int i=0,j=0,k=p;k<=r;k++)
	{
		if(L[i]<=R[j])
		{
			a[k]=L[i];
			i++;
		}
		else
		{
			a[k]=R[j];
			j++;
		}
	}
	delete []L;
	delete []R;
}
void mergepass(int *a,int p,int r)//二路归并 
{
	if(p<r)
	{
		int q=(p+r)/2;
		mergepass(a,p,q);
		mergepass(a,q+1,r);
		merge(a,p,q,r);	
	}	
} 


总结:具体的算法过程以后有时间会补上哒~但面试前看看这些还是挺有效果的呢!

最后补上一张各种排序算法的对比:















图解:常用排序算法(冒泡、选择、插入、希尔、快速、归并、堆) 插入排序只交换相邻的元素,在大规模乱序情况下,极有可能发生某个元素从某一端逐位交换至另一端,严重影响效率。希尔排序的思路是:先进行远距离跨越交换,从而使得元素尽快靠近最终位置,达到部分有序的目的,然后,再进行插入排序(当H=1时)。:首先,选择一个元素,将其余元素分成三部分,一部分小于该元素,一部分大于该元素,一部分等于该元素。:将完全二叉树的结点,按照层级顺序,将每一层的结点,从左至右放入数组中,且下标从1开始,即根节点的下标为1位置。:不稳定(排序后,相同元素的相对位置可能发生变化) 阅读详情

相关推荐

六种内部排序算法比较:直接插入排序、希尔排序、冒泡排序、快速排序、选择排序、堆排序。

六种内部排序算法比较:直接插入排序、希尔排序、冒泡排序、快速排序、选择排序、堆排序。包含实验报告和源代码设计。

对以下6种常用的内部排序算法进行比较:起泡排序、直接插入排序、简单选择排序、快速排序、希尔排序、堆排序。

题目要求: (1)对以下6种常用的内部排序算法进行比较:起泡排序、直接插入排序、简单选择排序、快速排序、希尔排序、堆排序。 (2)待排序表的表长不小于100;其中的数据要用伪随机数产生程序产生;至少要用5组不同的输入数据作比较;比较的指标为有关键字参加的比较次数和关键字的移动次数(关键字交换计为3次移动)。 (3)最后要对结果作出简单分析,包括对各组数据得出结果波动大小的解释。 (4)希尔排序:先将整个待排记录序列分割成为若干子序列分别进行直接插入排序,待整个序列中的记录“基本有序”时,再对全体记录进行一次

qq_43541242的博客 4265

内排序算法比较,六种排序算法分析

题目一: 内排序算法比较 1) 对以下6种常用的内部排序算法进行比较:起泡排序,直接插入排序,简单选择排序,快速排序,希尔排序,堆排序。 2) 待排序记录的文件个数不小于1000( 其数据用伪随机数产生),至少用5组不同的输入数据作比较;比较的指标为关键字的比较次数和关键字的移动次数(一次关键字交换计为3次移动)。 3) 统计在完全正序、完全逆序及无序情况下的关键字比较次数和移动次数。 4) 对结果作简单分析,包括对各组数据得出结果波动大小的解释。

c语言内部排序实验报告,内部排序算法比较实验报告(c语言版)

题目:编制一个演示内部排序算法比较的程序班级:姓名:学号:完成日期:一、需求分析1.本演示程序对以下6种常用的内部排序算法进行实测比较:起泡排序,直接插入排序,简单选择排序,快速排序,希尔排序,堆排序。2.待排序表的元素的关键字为整数。比较的指标为有关键字参加的比较次数和关键字的移动次数(关键字交换记为3次移动)。3.演示程序以以用户和计算机的对话方式执行,在计算机终端上显示提示信息,对随机数组进...

weixin_29035147的博客 1346

风控IV、AUC、KS python计算代码

df_temp:数据集,Y:是否逾期标签,feas_list:需要计算IV的 变量。2、 按月和不同Y 下的 IV计算。

暮雨听轩的专栏 1618

峰值电流模式CCM BUCK的传递函数推导

电流内环闭环传递函数: Gci(s)=i^L(s)v^comp(s)=FmGid(s)1+KRiHe(s)FmGid(s)=1Ri11+s[mcL+(0.5VIN−Vo)RiVINRifSW]+s21(πfSW)2 G_{ci}(s)=\frac{\hat i_{L}(s)}{\hat v_{comp}(s)}=\frac {F_mG_{id}(s)}{1+KR_iH_e(s)F_mG_{id}(s)}=\frac{1}{R_i}\frac{1}{1+s[\frac{m_cL+(0.5V_{IN}-V_o)

c007106333的博客 2357

常见排序算法详解(插入、希尔、选择、堆、冒泡、快速、归并)【C语言实现】

本文介绍和实现常见排序算法,其中对详细介绍快速排序和归并排序递归与非递归版本的实现。

Bottle2023的博客 1000

ORCA(动态避障)算法

A物体沿着向量v1和v2移动,刚好能和B擦肩而过,不会发生碰撞;若V1和V2的夹角再小一点的话就一定会发生碰撞。A的速度为V1,B的速度为V2,A对于B的相对速度(也就是我们把B看做静止,A的速度)就是V1-V2。,那么怎么判定A的速度向量是不是在碰撞区域内呢?这就需要用A相对于B的速度来判定。红线画出来的锥形区域就是A相对于B的。

u012861978的专栏 4769

数据结构实验(六)

1.实验题目 各种内部排序算法的时间复杂度分析结果只给出了算法执行时间的阶,或大概执行时 间。试通过随机的数据比较各算法的关键字比较次数和关键字移动次数,以取得直观感受。 [基本要求] 对以下常用的内部排序算法进行比较:起泡排序、直接插入排序、简单选择排序、快速 排序、希尔排序、堆排序。 2.需求分析 同一组数由不同的方法是进行排序,比较各种算法需要的时间大小和移动次数,对不同算法有直观的体验。 常用排序排序方法有:起泡排序、直接插入排序、简单选择排序、快速排序、希尔排序、堆排序...

Capricorn_wow的博客 904

CFturbo 2024保姆级教程:从流量扬程到三维叶轮,手把手搞定离心泵水力设计

本文提供CFturbo 2024离心泵水力设计的全流程实战指南,从流量扬程参数输入到三维叶轮模型导出,详细解析设计步骤与优化技巧。涵盖叶轮尺寸确定、子午面型线设计、叶片角度调整等关键环节,帮助工程师高效完成CAE辅助的离心泵水力设计,提升设计质量与效率。

weixin_42569329的博客 934

微信小程序 - 解决web-view嵌套H5网页白屏问题,将h5网页嵌套在webview页面出现无法加载一片空白,详解微信小程序<web-view>页面跳转出现白屏情况(无论本地还是线上H5都能解决)

微信小程序解决web-view打开网页在手机上出现白屏的问题,小程序web-view嵌套H5项目白屏问题分析及解决,使用web-view组件加载H5网页链接后白屏情况,小程序嵌套的h5网页中跳转页面时也有可能出现白屏问题,嵌套webview页面时,出现白屏,WebView 加载不出网页,微信小程序<web-view>页面跳转出现白屏解决方法,解决WebView白屏空白,H5内嵌第三方小程序打开白屏,微信小程序嵌入h5页面加载空白,微信小程序web-view跳转h5白屏,解决微信小程序web-view打开网页

🏆 前端领域优质创作者 1万+

六大常见排序算法(插入、堆排、希尔、选择、冒泡、快速)

六大排序算法,有图有真相!!!

欢迎来到梨+萍的博客,不准备看点啥学习嘛。。。 2713

用扩展点为 Fiori Elements 添加自定义动作:从原理到落地的完整实践

本文介绍了如何在基于OData V4的Fiori Elements应用中通过Extension Points添加自定义Action按钮。主要内容包括: 扩展点动作与标准注解动作的区别:扩展点用于非标准前端流程、组合操作等场景,需通过extensionAPI与框架交互。 扩展点动作的插入位置:可放置在List Report表格工具栏、Object Page页眉/页脚/Section工具栏等位置,并说明了相应的manifest.json配置节点。 配置模型与处理函数契约:详细说明了press、visible/e

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 250

【初阶数据结构与算法】排序算法总结篇(每个小节后面有源码)(直接插入、希尔、选择、堆、冒泡、快速、归并、计数以及非递归快速、归并排序)

本篇内容将从稳定性与复杂度等角度分析排序算法,列出它们的特点、优点以及缺点,希望大家有所收获,如果想更加细节地学习可以去看我之前写的各种排序算法的文章。

hdxbufcbjuhg的博客 5810

请尽可能地详细说明一个VLA项目的立项训练到落地的全流程

一个机器人VLA项目的全流程是一个复杂的系统工程,它深度融合了机器人学 (Robotics)计算机视觉 (CV)和自然语言处理 (NLP)。其核心挑战在于高质量数据的获取和从仿真到现实的有效迁移。与纯粹的软件AI项目相比,它增加了硬件、物理交互和安全性的维度,但其最终能让AI走出虚拟世界、在物理世界中产生实际价值,这也是其巨大的魅力所在。

具身机器人和通用AI 303

Python爬虫实战:用最新技术高效下载摄影网站图片

本文将深入探讨如何利用Python最新技术栈构建一个功能完整的摄影网站图片爬虫。我们将使用异步编程、智能反爬策略和现代化工具,实现高效、可靠的图片下载系统。高性能异步架构:使用asyncio实现高并发下载智能反爬策略:支持多种反爬措施和浏览器模拟多网站适配:可解析多种摄影网站结构数据管理:完整的下载记录和统计功能扩展性强:支持代理、分布式等高级功能用户友好:提供进度显示和详细日志。

2201_76125261的博客 1644

十大经典排序算法基本思想和图解(冒泡、插入、选择、快速、希尔、堆、归并)

算法分类 十种常见排序算法可以分为两大类: 1.非线性时间比较类排序:通过比较来决定元素间的相对次序,由于其时间复杂度不能突破O(nlogn),因此称为非线性时间比较类排序。 2.线性时间非比较类排序:不通过比较来决定元素间的相对次序,它可以突破基于比较排序的时间下界,以线性时间运行,因此称为线性时间非比较类排序。    算法复杂度: 图片名词解释: n: 数据规模 k:...

小喵的博客 8388

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

C++排序算法总结(冒泡、插入、选择、希尔、归并、快速、堆)

C++排序算法总结(冒泡、插入、选择、希尔、归并、快速、堆)排序算法是面试中经常遇到以及面试官常考的算法基本功,掌握排序算法对于找工作而言很重要的一个标准。 [转载注明出处] (http://my.youkuaiyun.com/my/mycsdn)排序算法总结: 冒泡排序 插入排序 选择排序 希尔排序 归并排序 快速排序 堆排序 目录C排序算法总结冒泡插入选择希尔归并快速堆目录 冒泡排序 插入排序 选择排序

yuebai008的博客 3725

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

七种排序算法总结(冒泡、插入、选择、希尔、归并、堆、快速)

七种排序算法总结(冒泡、插入、选择、希尔、归并、堆、快速) 首先声明一下,本文只对七种排序算法做简单总结,并参照一些资料给出自己的代码实现,并没有对某种算法理论讲解,更详细的 了 解可以参考以下资料(本人参考): 1、《 data structure and algorithm analysis in c 》 2、《大话数据结构》 3、 http://blog.youkuaiyun.com/...

zhupengqq的博客 280

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

十大排序算法(冒泡,选择,插入,希尔,堆,快速,归并,计数,基数,桶)

目录 冒泡: 选择: 插入: 希尔: 堆: 快速排序: 归并排序: 计数排序: 基数排序: 桶排序: 排序算法: 十种比较经典的排序算法:冒泡,选择,插入,希尔,堆,快速,归并,计数,基数,桶。每种算法在一定环境下各有各的优越性,需要根据数据的分布状况进行合理选择。 排序算法的稳定性: 当待排序的数据中有相同的数据,排序算法是否会更改它们的前后关系,不会更改的叫稳定排序,可能会更改的叫不稳定排序。 冒泡: 特点:对数据的有序性敏感 是否稳定:稳定 平均时间复杂度: O(n^2)

wjasonk的博客 941

十种排序算法总结(冒泡、插入、选择、希尔、归并、堆、快速,计数,桶,基数)

首先声明一下,本文只对七种排序算法做简单总结,并参照一些资料给出自己的代码实现,并没有对某种算法理论讲解,更详细的 了解可以参考以下资料(本人参考): 1、《data structure and algorithm analysis in c 》 2、《大话数据结构》 3、http://blog.youkuaiyun.com/morewindows/article/details/7961256

Meditation 7万+

排序算法-冒泡、选择、堆、插入、归并、快速、希尔

排序算法-冒泡、选择、堆、插入、归并、快速、希尔

伟庭的博客 1006

Python C\C++ Java 手写十大经典排序算法 冒泡、选择、插入、希尔、归并、快速、堆、计数、桶、基数排序

Python C\C++ Java 手写十大经典排序算法 冒泡、选择、插入、希尔、归并、快速、堆、计数、桶、基数排序 排序算法可以分为内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存。常见的内部排序算法有:插入排序、希尔排序、选择排序、冒泡排序、归并排序、快速排序、堆排序、基数排序等。用一张图概括: 关于时...

Rp的博客 517

十大经典排序算法详细介绍含动画演示(冒泡、选择、插入、希尔、归并、快速、堆、计数、桶、基数排序)

排序算法是计算机科学中的基本算法,可分为比较类和非比较类两种。比较类排序(如冒泡、选择、插入、希尔、归并、快速排序等)通过元素比较确定次序,时间复杂度通常为O(nlogn);非比较类排序(如计数、桶、基数排序)不依赖比较,能以线性时间运行。文章详细介绍了冒泡、选择、插入、希尔、归并、快速、堆、计数、桶、基数排序的原理、实现代码、时间/空间复杂度及适用场景。

weixin_48949902的博客 818

排序算法大总结(插入、希尔、选择、堆、冒泡、快速、归并、计数)

排序算法大总结(插入、希尔、选择、堆、冒泡、快速、归并、计数)

羊羊羊 1457

一文带你彻底掌握八大排序算法——插入、希尔、选择、堆排、冒泡、快速、归并、计数

所谓排序,就是将一堆数据按照某个或者某些关键字的大小,进行降序或升序排列起来的操作。注意这里说的是关键字,也就是说排序的对象不一定是数字,例如我要将班上的学生按照数学成绩来排序,这里的排序的对象就是学生,而关键字就是每个学生的成绩。常见的排序可分为四种1.插入排序(直接插入排序、希尔排序)2.选择排序(直接选择排序、堆排序)3.交换排序(冒泡排序、快速排序)4.归并排序以上几种排序方法都要通过不断地比较数据大小来调整位置,从而达到有序,都属于比较排序。

weixin_74113106的博客 1498
上一篇: 中兴蓝剑计划机试题(FIFO缓存)
下一篇: 数据挖掘一般流程(数据清洗,特征提取,建模,调参)
西电校草
博客等级 码龄13年 246粉丝 19原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值