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

数据结构与算法:冒泡排序、插入排序、选择排序 排序算法太多了,有很多可能你连名字都没听说过,比如猴子排序、睡眠排序、面条排序等。我只讲众多排序算法中的一小撮,也是最经典的、最常用的:冒泡排序、插入排序、选择排序、归并排序、快速排序、计数排序、基数排序、桶排序。按照时间复杂度把它们分成了三类,本文先分析冒泡、插入、选择三种排序算法 排序算法 时间复杂度 是否基于比较 冒泡、插入、选择 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大排序算法(快速排序,冒泡排序,选择排序,归并排序,插入排序,希尔排序,堆排序)实现源码

对一组数的从小到大排和从大到小排的几种方法

随便给一组数据,然后用几种方法来对它进行排序,再取前面k个较小/大的数,设k=3 从小到大排: int k = 3; int[] nums = new int[] { 4, 1, 6, 3, 7, 9, 2, 5 }; // 第一种,调库 Arrays.sort(nums); for (int i = 0; i < k; i++) { System.out.print(n...

Fiona20的博客 5498

MTK平台高效部署Qwen2.5大模型:从转换到推理全流程解析

本文详细解析了在联发科(MTK)NeuroPilot平台上高效部署Qwen2.5大模型的全流程。内容涵盖从环境搭建、模型转换、量化优化到编译部署与上机推理的完整步骤,重点分享了模型转换与模型运行的关键实践与避坑指南,旨在帮助开发者将大语言模型成功集成至移动及边缘设备。

zeta9的博客 378

三种方法教你如何把数值类型的数组按从小到大的顺序排序

三种方法教你如何把数值类型的数组按从小到大的顺序排序

SuBaijiu的博客 9853

STM32G0实战:HAL库与LL库Flash操作避坑指南(附HardFault解决方案)

本文深入剖析了STM32G0系列微控制器在Flash操作中常见的HardFault问题,对比了HAL库与LL库在读写擦除操作上的底层差异与潜在陷阱。文章提供了基于寄存器状态分析的精准调试方法,并给出了经过实战检验的解决方案与健壮的代码框架,帮助开发者有效规避数据丢失与系统崩溃风险。

t8u9v0w1x的博客 730

基于LendingClub数据的信贷分析和建模报告

一:课题分析 二:数据获取 三:数据探索 3.1主要特征含义理解 3.2特征分布 3.2.1目标特征分布 3.2.2分类变量的分布 3.2.3连续数值特征分布 3.2.4时序特征分布 3.2.5文字特征分布 3.2.6两两特征的协方差 四:数据预处理 4.1数据集划分 4.2特征缺失值识别与处理 4.2.1严重缺失值的处理 4.2.2缺失值填充 4.3同值性特...

棒子皮蹦蹦床 2万+

冒泡、选择、插入排序算法(c语言)实现

几种常见排序算法的实现 一、冒泡排序 1.百度百科 冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法。它重复地走访过要排序的元素列,依次比较两个相邻的元素,如果顺序(如从大到小、首字母从Z到A)错误就把他们交换过来。走访元素的工作是重复地进行直到没有相邻元素需要交换,也就是说该元素列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端(升序或降序排列),就如同碳酸饮料中二氧化碳的气泡最终会上浮到顶端一样,故名“冒泡排序”。 2.C语言实现 分别定义两个函

m0_46611602的博客 3054

abaqus热力耦合模拟教程学习笔记

学习资源:BV1je4y1a7Ku软件:abaqus2016以m为单位制。

qq_41900477的博客 2万+

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

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

零一的博客 2万+

程序化广告ADX系统架构设计与实现

摘要: 本文详细介绍了程序化广告交易平台(ADX)的系统架构设计与实现。ADX作为连接广告主与媒体的核心平台,采用基于腾讯云和阿里云的微服务架构,包含网络基础设施、负载均衡、消息处理、核心业务服务和多级数据存储等层次。重点解析了Kafka消息队列处理高并发广告请求、Redis实时统计关键指标等核心技术实现,并提供了Java代码示例展示广告请求处理、竞价流程等核心功能。该系统通过分层设计和分布式组件,实现了高性能、高可用的程序化广告交易能力。

私聊前往站内信:https://i.youkuaiyun.com/#/msg/chat/weixin_44976692 768

AI自动化流程在金融风控中的3个典型案例

AI自动化风控流程全流程自动化:最小化人工干预,实现从数据输入到决策输出的闭环自适应学习:通过持续数据反馈实现模型自动迭代优化实时决策能力:满足毫秒级(支付风控)至分钟级(信贷审批)的响应需求多模态数据融合:整合结构化、非结构化和实时流数据智能决策解释:自动生成符合监管要求的决策解释人机协同机制:在高风险场景下实现AI与人类专家的协同决策实施后关键绩效指标(KPI)变化指标实施前实施后改进幅度平均审批时间3.2天4.7分钟-99.7%自动审批率15%85%+467%

架构师的AI之路,分享AI应用开发架构的学习与实践。 1535

经典排序--冒泡排序、简单选择排序、直接插入排序

1. 冒泡排序 对相邻元素进行两两比较,若逆序则进行交换,每一趟冒泡都会将最小(最大)的元素“浮”到顶端(归位),所以对于n个元素的数组,最多只需n-1趟冒泡,便可达到完全有序。

MusicDancing的博客 992

PTC Creo软件二次开发:使用C++进行Creo二次开发实战

C++是一种静态类型的、编译式的、通用的、大小写敏感的、不规则的编程语言,支持过程化编程、面向对象编程和泛型编程。由Bjarne Stroustrup在贝尔实验室开发,最初作为C语言的增强版出现,后来发展成为一种独立的语言。C++不仅保留了C语言的高效性和灵活性,还引入了类、模板、命名空间等高级特性,使其成为开发复杂系统和软件的理想选择。

kkchenjj的博客 4043

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

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

sougou_1323的博客 1338

ChatGPT启蒙之旅:弟弟妹妹的关键概念入门

本文主要介绍了ChatGPT启蒙之旅:弟弟妹妹的关键概念探险,希望能对初学大模型的同学们有所帮助。 文章目录 1. 背景 2. GPT是个什么样的人? 3. GPT使用的核心思维 4. GPT使用的场景介绍

herosunly的博客 16万+

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

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

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

未见花闻的博客 1524

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

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

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

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

OV9734 DATASHEET,完整规格书

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

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

以下从基础开始,逐步详细复习各个排序算法。先从三个最基础最简单的排序算法开始。他们分别是冒泡排序、选择排序、插入排序。以下都是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

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

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

qq_55624813的博客 4512

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

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

m0_64826370的博客 937

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

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

Ronz 的博客 1210

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

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

qq_59057509的博客 2445

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

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

Linkai12138的博客 1175

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

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

weixin_45003796的博客 1082

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

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值