(九)数据结构之简单排序算法实现:冒泡排序、插入排序和选择排序

数据结构与算法:冒泡排序、插入排序、选择排序 排序算法太多了,有很多可能你连名字都没听说过,比如猴子排序、睡眠排序、面条排序等。我只讲众多排序算法中的一小撮,也是最经典的、最常用的:冒泡排序、插入排序、选择排序、归并排序、快速排序、计数排序、基数排序、桶排序。按照时间复杂度把它们分成了三类,本文先分析冒泡、插入、选择三种排序算法 排序算法 时间复杂度 是否基于比较 冒泡、插入、选择 O(n²) √ 快排、归并 O(nlongn) √ 桶、计数、基数 O(n) × 带着问题去学习,是最有效的学习方法。所以按照惯例,我还是先给你 阅读详情

1、冒泡排序

/* 冒泡排序,按照由小到大顺序进行排序 */
void Bubble_Sort( ElementType A[], int N )
{ 
	int P, i;
	int flag = 0;	/* 定义一个flag来判断带排序序列是否有序或局部有序,提高算法效率 */
	for ( P=N-1; P>=0; P-- )
	{
		flag = 0;
		for( i=0; i<P; i++ )
		{
			/* 一趟冒泡*/
			if ( A[i] > A[i+1] ) 
			{
				Swap(&A[i], &A[i+1]);
				flag = 1; /* 标识发生了交换*/
			}
		}
		if ( flag==0 ) break; /* 全程无交换*/
	}
}

2、插入排序

/* 插入排序,从小到大排序, */
void Insertion_Sort( ElementType A[], int N )
{ 
	int i, P;
	ElementType Tmp;
	for ( P=1; P<N; P++ ) 
	{
		Tmp = A[P]; 				/* 从第二个元素开始插入*/
		for ( i=P; i>0 && A[i-1]>Tmp; i-- )
			A[i] = A[i-1]; 			/* 移出空位*/
		A[i] = Tmp; 				/* 把后续数据插入到合适的位置上去*/
	}
}

3、选择排序

/* 选择排序 */
void Selection_Sort ( ElementType A[], int N )
{
	int i, j, k;
	ElementType Tmp;
	for(i = 0; i < N; i++)
	{
		Tmp = A[i];
		k = i;
		for(j = i + 1; j < N; j++)
		{
			if(Tmp > A[j])  /* 找到剩下元素中最小的元素对应的下标 */
			{
				 k = j; 
				 Tmp = A[j];
			}
		}
		if(k != i)		// 表示当前位置和最小元素所在位置不相同
			Swap(&A[i], &A[k]);
	}
}

4、完整示例代码

4.1 冒泡排序和插入排序

/* 简单排序算法的基本实现 */
#include <stdio.h>

/* 定义一些辅助数据结构或者类型 */
typedef int ElementType;

/* 定义一个用于交换的函数 */
void Swap(ElementType *a, ElementType *b)
{
	ElementType temp;z
	temp = *a;
	*a = *b;
	*b = temp;
}

/* 冒泡排序,按照由小到大顺序进行排序 */
void Bubble_Sort( ElementType A[], int N )
{ 
	int P, i;
	int flag = 0;	/* 定义一个flag来判断带排序序列是否有序或局部有序,提高算法效率 */
	for ( P=N-1; P>=0; P-- )
	{
		flag = 0;
		for( i=0; i<P; i++ )
		{
			/* 一趟冒泡*/
			if ( A[i] > A[i+1] ) 
			{
				Swap(&A[i], &A[i+1]);
				flag = 1; /* 标识发生了交换*/
			}
		}
		if ( flag==0 ) break; /* 全程无交换*/
	}
}

/* 插入排序,从小到大排序, */
void Insertion_Sort( ElementType A[], int N )
{ 
	int i, P;
	ElementType Tmp;
	for ( P=1; P<N; P++ ) 
	{
		Tmp = A[P]; 				/* 从第二个元素开始插入*/
		for ( i=P; i>0 && A[i-1]>Tmp; i-- )
			A[i] = A[i-1]; 			/* 移出空位*/
		A[i] = Tmp; 				/* 把后续数据插入到合适的位置上去*/
	}
}

/* 程序入口 */
int main()
{
	int i;
	ElementType temp;
	ElementType array[10];

	printf("Input 10 numbers : ");
	for(i = 0; i < 10; i++)
	{
		scanf("%d", &temp);
		array[i] = temp;
	}

	/* 原始数据输出 */
	printf("***********************************Origin************************************\n");
	for(i = 0; i < 10; i++)
		printf("%d ", array[i]);
	printf("\n");

	/* 冒泡排序后输出 */
	printf("***********************************Bubble************************************\n");
	Bubble_Sort(array, sizeof(array)/sizeof(array[0]));
	for(i = 0; i < 10; i++)
		printf("%d ", array[i]);
	printf("\n");

	printf("Input 10 numbers : ");
	for(i = 0; i < 10; i++)
	{
		scanf("%d", &temp);
		array[i] = temp;
	}

	/* 原始数据输出 */
	printf("***********************************Origin************************************\n");
	for(i = 0; i < 10; i++)
		printf("%d ", array[i]);
	printf("\n");

	/* 插入排序后输出 */
	printf("***********************************Insertion*********************************\n");
	Insertion_Sort(array, sizeof(array)/sizeof(array[0]));
	for(i = 0; i < 10; i++)
		printf("%d ", array[i]);
	printf("\n");

	return 0;
}

4.2 选择排序

#include <stdio.h>

/* 定义一些辅助数据结构或者类型 */
typedef int ElementType;

/* 定义一个用于交换的函数 */
void Swap(ElementType *a, ElementType *b)
{
	ElementType temp;
	temp = *a;
	*a = *b;
	*b = temp;
}

/* 选择排序 */
void Selection_Sort ( ElementType A[], int N )
{
	int i, j, k;
	ElementType Tmp;
	for(i = 0; i < N; i++)
	{
		Tmp = A[i];
		k = i;
		for(j = i + 1; j < N; j++)
		{
			if(Tmp > A[j])  /* 找到剩下元素中最小的元素对应的下标 */
			{
				 k = j; 
				 Tmp = A[j];
			}
		}
		if(k != i)		// 表示当前位置和最小元素所在位置不相同
			Swap(&A[i], &A[k]);
	}
}


/* 程序入口 */
int main()
{
	
	int i;
	ElementType temp;
	ElementType array[10];

	printf("Input 10 numbers : ");
	for(i = 0; i < 10; i++)
	{
		scanf("%d", &temp);
		array[i] = temp;
	}

	/* 原始数据输出 */
	printf("***********************************Origin************************************\n");
	for(i = 0; i < 10; i++)
		printf("%d ", array[i]);
	printf("\n");

	/* 选择排序后输出 */
	printf("***********************************Selection*********************************\n");
	Selection_Sort(array, sizeof(array)/sizeof(array[0]));
	for(i = 0; i < 10; i++)
		printf("%d ", array[i]);
	printf("\n");

	return 0;
}
十大排序算法详解(一)冒泡排序、选择排序、插入排序、快速排序、希尔排序 冒泡排序、选择排序、插入排序、快速排序、希尔排序 阅读详情

相关推荐

7大排序算法实现程序(快速排序,冒泡排序,选择排序,归并排序,插入排序,希尔排序,堆排序)

7大排序算法(快速排序,冒泡排序,选择排序,归并排序,插入排序,希尔排序,堆排序)实现源码

数据结构-冒泡排序(含全部代码)

目录 函数分析 代码 全部代码 结果截图 函数分析 下标从小到大,相邻依次比较,直到最后两个被比较,每次比较,若为逆序,则交换,以上为一趟冒泡排序。 使用一个标记,有交换时标记,若一趟下来没有需要交换的,则停止。 void BubbleSort(SqList &L) 参数:顺序表L,时间复杂度O(n^2),空间复杂度O(1),稳定性:稳定 代码 //冒泡排序 升序排序 void BubbleSort(SqList &L) { int m = L.length - 1;

关注网络安全、云原生安全 2万+

华为eNSP实战:手把手教你配置DHCP全局地址池(含AP固定IP分配)

本文通过华为eNSP模拟器,详细演示了如何配置DHCP全局地址池,为不同业务VLAN动态分配IP地址,并重点讲解了如何通过MAC地址绑定为接入点(AP)分配固定IP。文章涵盖了从拓扑设计、基础网络搭建到地址池精细配置、验证测试及常见故障排查的全流程,是网络工程师掌握企业级DHCP部署与AP管理的实用指南。

weixin_29235923的博客 600

数据结构与算法——冒泡排序

目录 前言 一、冒泡排序算法介绍 二、冒泡排序算法原理 三、示例分析 四、实现代码 前言 冒泡排序是一种常用的排序方法。它是一种具有“交换”性质的排序方法。 一、冒泡排序算法介绍 冒泡是一种计算机科学领域的较简单的排序算法。它重复地走访过要排序的元素列,依次比较两个相邻的元素,如果顺序(如从大到小、首字母从Z到A)错误就把他们交换过来。走访元素的工作是重复地进行直到没有相邻元素需要交换,也就是说该元素列已经排序完成。 这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端

chen18221987993的博客 3050

SpringBoot+Maven打包实战:把项目变成SDK供其他团队调用

本文详细介绍了如何将SpringBoot项目改造并打包成可被其他项目依赖的SDK。通过调整Maven配置,剥离SpringBoot父依赖与启动类,并定制打包插件,最终生成标准的JAR依赖库,实现从“可执行应用”到“组件化SDK”的优雅转变,便于团队间功能复用。

assembly8low的博客 827

Claude Skills 深度讲解

阶段 1:Function Call(2023)├─ 大模型可以调用外部工具├─ 问题:缺乏对任务的深度理解└─ 局限:工具调用简单线性阶段 2:MCP 上下文工程(2024)├─ 大模型有了更丰富的上下文和工具├─ 问题:仍然需要手动编写复杂的 Prompt└─ 局限:每次对话都需要重新加载上下文阶段 3:Claude Skills(2025)├─ 大模型有了「能力模块」的概念├─ 可以动态加载、组合、执行专门的工作流├─ 真正实现了「知识的模块化和复用」

u013134676的博客 1464

三种简单排序算法的原理及实现---冒泡排序、选择排序、插入排序

三种简单排序冒泡排序举例子:4,5,6,3,2,1的整个排序过程代码实现时间复杂度分析 冒泡排序 排序原理: 比较相邻的元素,如果前一个元素比后一个元素大,就交换这两个元素的位置。 对每一对相邻元素做同样的工作,从开始第一对元素到结尾的最后一对元素,最终最后位置的元素就是最大值。 举例子:4,5,6,3,2,1的整个排序过程 代码实现 确定排序的次数,有多少个元素即为排序多少次。 每一排序就是比较相邻元素,所以使用for循环嵌套。 每一次排序结束后,待排序的数的数量减1. 具体代码 时间

weixin_45003796的博客 1082

Goose开源程序本地机上 AI 代理,能够从头到尾自动执行复杂的开发任务。Goose 不仅可以提供代码建议,还可以自主构建整个项目、编写和执行代码、调试故障、编排工作流程以及与外部 API 交互

Goose开源程序 是您的本机上 AI 代理,能够从头到尾自动执行复杂的开发任务。Goose 不仅可以提供代码建议,还可以自主构建整个项目、编写和执行代码、调试故障、编排工作流程以及与外部 API 交互。无论您是在构建想法原型、优化现有代码,还是管理复杂的工程管道,goose 都能适应您的工作流程并精确执行任务。

struggle2025的博客 2043

【数据结构与算法】简单排序(冒泡排序、选择排序、插入排序)完整思路,并用代码封装排序函数

之前的文章,我已经把前端需要了解的数据结构都给说了一边,并且我们也都对其进行了封装。现在我们要开始对排序算法部分进行讲解,排序算法顾名思义,就是对一堆杂乱无章的数据按照一定的规则将它们有序地排列在一起。 在讲解排序算法时,大致分成两大类,如下图 本文

零一的博客 2万+

URScript介绍

优傲机器人(Universal Robots)是丹麦工业协作机器人制造商,2005年成立,2015年被泰瑞达收购。其自研编程语言URScript基于Python语法,专为机器人控制优化,支持运动指令、IO控制等功能,具有类Python的简洁语法和实时性特点。URScript提供丰富的API,支持变量赋值、条件判断、循环及函数定义等编程结构,参数按值传递。用户可通过该语言在Polyscope界面编写程序,实现自动化任务。目前优傲在全球20多个办事处为多国客户提供服务。

谢谢大家的关注和点赞!这里只有纯纯的知识干货,没有一句废话。希望能实实在在帮到大家~要是觉得有用,别忘了给我点支持哟,你 603

构建企业级AI税务顾问:优化税收策略与合规

本文深入探讨了构建企业级AI税务顾问的重要性及其在实际应用中的价值。通过分析当前税务领域的挑战和问题,本文详细介绍了AI税务顾问的基本原理、技术架构、核心功能以及实践应用。文章以逐步分析的方式,从背景介绍、核心概念与联系、算法原理讲解、系统分析与架构设计、项目实战到最佳实践与展望,系统性地展示了如何利用AI技术优化税收策略并确保税务合规。文章旨在为企业和税务从业者提供实用的指导,推动AI在税务领域的创新与发展。在当前全球经济一体化的背景下,企业面临着越来越复杂的税务环境。首先,税收法规的复杂性日益增加。

AI天才研究院 1156

[排序算法]冒泡排序、插入排序、选择排序

文章目录1. 排序算法要关注哪些问题1) 复杂度(1) 时间复杂度(2) 空间复杂度2) 稳定性2. 冒泡排序1) 时间复杂度2) 冒泡排序是原地算法3) 冒泡排序是稳定算法3. 插入排序1) 时间复杂度2) 插入排序是原地算法3) 插入排序是稳定算法4. 选择排序1) 时间复杂度2) 插入排序是原地算法3) 插入排序不是稳定算法5. 总结 1. 排序算法要关注哪些问题 1) 复杂度 对于算法,我...

sougou_1323的博客 1338

Python 实战:手语翻译系统——从视频到文本的智能转换

今天,我们用 Python 构建了一个。

Echo_Wish 344

【JavaSE与数据结构】排序算法之冒泡排序,选择排序,插入排序与希尔排序

本篇文章带大家认识排序算法——冒泡排序,选择排序,插入排序与希尔排序,其中冒泡排序,选择排序,插入排序是基础的排序算法,希尔排序是插入排序的优化,四种排序算法全部都是基于比较的排序算法,本文将以图解动图的方式描述算法实现过程,实现代码为java。

未见花闻的博客 1524

用长tree方式做等长线

1)写一个sdc,把等长线的起点设置成clock source,用于创建create_clock,至于period和waveform等参数随便写即可。然后clock_opt -from build_clock -to route_clock即可。3)在正式cts之前或之后,给自己创建的scenario长tree并don't touch。前面讲过了如何用set_data_check做等长线,这里再讲一下如何用cts的方式做。2)为该clock创建一个新mode,并创建对应的scenario。

m0_61544122的博客 622

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

c语言实现冒泡排序,选择排序,插入排序,三种基础排序算法

冒泡排序是最基础的算法,他是怎么实现的呢,看这一排数据,我们要让他完成升序,也就是让87631变成13678冒泡排序是一步一步往下走的先是第一次排序,8,跟后面的4个数排序,8<7 交换,变成7 8 6 3 1;从8开始比6<8 交换,变成7 6 8 3 1;还是从8开始3<8 交换,变成7 6 3 8 1;从8开始1<8 交换,变成7 6 3 1 8;这样就完成了第一次排序我们的8成功走到了最后第二次排序7<6 交换,变成6 7 3 1 8;从7开始3<7 交换,变成6 3 7 1 8。

2301_79083481的博客 1395

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

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

三个简单排序算法:冒泡排序、选择排序、插入排序

以下从基础开始,逐步详细复习各个排序算法。先从三个最基础最简单的排序算法开始。他们分别是冒泡排序、选择排序、插入排序。以下都是java代码,并且认为升序是有序。一、冒泡排序1、代码public class Main{//冒泡排序 public static void main(String[] args){ int[] a=new int[]{1,3,1,2,0,4,5,2,6,2,0}; ...

Gensoukyo 7648

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

排序算法:冒泡排序、插入排序、选择排序、希尔排序

目录 一、冒泡排序: 二、插入排序: 三、选择排序: 四、希尔排序: 一、冒泡排序: 1、算法原理: 冒泡排序只会操作相邻的两个数据。每次冒泡操作都会对相邻的两个元素进行比较,看是否满足大小关系的要求。如果不满足就让它俩互换位置。一次冒泡会让至少一个元素移动到它应该在的位置,重复n次,就完成了n个数据的排序工作。 2、算法描述: (1)比较相邻的元素。如果第一个比第二个大,就交换它们两个; (2)对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对,这样在最后的元素应该会是最大的数

qq_55624813的博客 4512

【数据结构】插入排序、选择排序、冒泡排序、希尔排序、堆排序

生活中我们总是会碰到各种各样的排序,今天我们就对部分常用的排序进行总结和学习,今天的内容还是相对比较简单的一部分,各位一起加油哦!

m0_64826370的博客 937

简单排序算法(冒泡排序、选择排序、插入排序、希尔排序)

java 排序算法 冒泡排序 选择排序 直接插入排序 希尔排序

Ronz 的博客 1210

常见排序算法:插入排序,选择排序,冒泡排序,快速排序

插入排序,选择排序,冒泡排序,快速排序的理解与实现

qq_59057509的博客 2445

C++的几种简单地排序算法(冒泡排序,选择排序,插入排序)

之前也写过很多排序的算法,今天来总结一下这些简单的排序算法,主要有冒泡排序,选择排序,插入排序,主要讲解冒泡排序,毕竟冒泡排序是我接触的第一个排序算法; 这几行代码将会以c++模板函数的形式给出,但是算法原理都是一样的; 冒泡排序: 冒泡排序就是依次比较相邻的两个元素。以n个数组元素降序排序为例,依次比较相邻的两个元素,前者比后者小,则交换这两个元素,经过一轮排序之后,所有元素中最小的元素就在最后...

Linkai12138的博客 1175

03_1排序算法:冒泡排序、选择排序、插入排序

​ 开始系统学习算法啦!为后面力扣和蓝桥杯的刷题做准备!这个专栏将记录自己学习算法是的笔记,包括概念,算法运行过程,以及代码实现,希望能给大家带来帮助,感兴趣的小伙伴欢迎评论区留言或者私信博主哦!今天更新的是《03_1排序算法:冒泡排序、选择排序、插入排序》 ​

weixin_63866037的博客 955

【算法系列】常见排序算法:冒泡排序、选择排序与插入排序

排序算法时间复杂度(最好)时间复杂度(平均)时间复杂度(最坏)空间复杂度稳定性冒泡排序O(n)O(n^2)O(n^2)O(1)稳定选择排序O(n^2)O(n^2)O(n^2)O(1)不稳定插入排序O(n)O(n^2)O(n^2)O(1)稳定。

斌斌(Java) 1186

插入排序和直接选择排序都是稳定的_冒泡排序、选择排序、插入排序

排序算法分类十种常见排序算法可以分为两大类:非线性时间比较类排序:通过比较来决定元素间的相对次序,由于其时间复杂度不能突破O(nlogn),因此称为非线性时间比较类排序。线性时间非比较类排序:不通过比较来决定元素间的相对次序,它可以突破基于比较排序的时间下界,以线性时间运行,因此称为线性时间非比较类排序。算法复杂度稳定:如果a原本在b前面,而a=b,排序之后a仍然在b的前面。不稳定:如果a原本在b...

weixin_30375113的博客 4708

Python排序算法——冒泡排序、选择排序、插入排序、希尔排序

一、冒泡排序 冒泡排序是一种简单的排序算法,它重复地遍历要排序的数组,一次比较两个元素,如果顺序错误就把它们交换过来。由于最大的元素经过交换会慢慢“浮”到数列的顶端,因此叫作冒泡排序。 冒泡排序的算法运作流程: 比较相邻的元素,如果第一个比第二个大,就交换他们两个。 对每组相邻元素做同样的操作,从开始第一对到结尾最后一对,最后的数会是最大的数。 对所有元素重复以上步骤,除了最后一个...

wangTongGen 1557
上一篇: (八)数据结构之最大堆的简单实现
下一篇: (十)数据结构之希尔排序算法实现
TECH_PRO
博客等级 码龄10年 167粉丝 84原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值