冒泡数组实现和冒泡数组的改进以及插入法排序

news2025/2/22 2:40:00

概念

在数组排序的过程中,每次比较相邻的两个数,并且把大的数放在后面

例如{1,3,5,7,9,2,4,6,8,10}

 

实现 

#include<iostream>
using namespace std;

int main()
{
	int arr[] = { 1,3,5,7,9,2,4,6,8,10};
	int i = 0;
	for (i = 0; i < 10 - 1 ; i++)
	{
		int j = 0;
		for (j = 0; j < 10 - 1 - i ; j++)
		{
			if (arr[j] > arr[j + 1])
			{
				int temp = arr[j];
				arr[j] = arr[j + 1];
				arr[j + 1] = temp;
//-------------------------------------------------
                //这一部分你们可以不写,这里主要是让你们了解交换过程
				for (int k = 0; k < 10; k++)
				{
					cout << arr[k] << "  ";
				}
				cout << endl;
//-------------------------------------------------
			}
		}
		
	}
	
	return 0;
}

 

改进 

冒泡算法的算法时间复杂度显然为O(n^2),效率十分低下。在有些情况下,算法执行若干次后,可能已经是有序序列了,但是上面的冒泡算法已经执行后面的比较,知道执行完n-1趟排序,这样显然不是最佳的方式。这时候我们可以设置一个标记,用来判断一趟排序过后有没有发生交换,如果没有发生交换,则说明数组已经有序了,已经不需要再进行余下的比较

 

#include<iostream>
using namespace std;

int main()
{
	int arr[] = { 1,3,5,7,9,2,4,6,8,10 };
	int i = 0;
	for (i = 0; i < 10 - 1 ; i++)
	{
		//定义一个标志用来查看在这一轮循环中是否发生循环了
		int flag = 0;
		int j = 0;
		for (j = 0; j < 10 - 1 - i ; j++)
		{
			if (arr[j] > arr[j + 1])
			{
				flag++;
				int temp = arr[j];
				arr[j] = arr[j + 1];
				arr[j + 1] = temp;
				for (int k = 0; k < 10; k++)
				{
					cout << arr[k] << "  ";
				}
				cout << endl;
			}
		}
		if (flag != 0)
		{
			cout << "交换了" << flag << "次" << endl;
		}
		else
		{
			cout << "未交换了" << endl;
			break;
		}
	}
	
	return 0;
}

 插入法

步骤:

1.从第一个元素开始,该元素已经是有序的了

2.取下一个元素temp,从已排序的元素序列从后往前扫描

3.如果该元素大于temp,则将该元素移到下一位

4.重复步骤3,直到找到已排序元素中小于等于temp的元素

5.tem插入到该元素的后面,如果已排序所有元素都大于temp,则将temp插入到下标为0的位置并且重复步骤2~5

在待排序的元素中,假设前n-1个元素已有序,现将第n个元素插入到前面已经排好的序列中,使得前n个元素有序。按照此法对所有元素进行插入,直到整个序列有序。但我们并不能确定待排元素中究竟哪一部分是有序的,所以我们一开始只能认为第一个元素是有序的,依次将其后面的元素插入到这个有序序列中来,直到整个序列有序为止。 

 

 

 

#include<iostream>
using namespace std;
int main()
{
	int arr[] = { 1,3,5,7,9,2,4,6,8,10 };
	for (int i = 0; i < 10 - 1; i++)
	{
		//记录有序序列最后一个元素的下标
		int end = i;
		//待插入的元素
		int temp = arr[end + 1];
		//单趟排
		while (end >= 0)
		{
			//比插入的数大就向后移
			if (temp < arr[end])
			{
				arr[end + 1] = arr[end];
				end--;
				
			}
			//比插入的数小,跳出循环
			else
			{
				break;
			}
			for (int k = 0; k < 10; k++)
			{
				cout << arr[k] << "  ";
			}
			cout << endl;
		}
		//tem放到比插入的数小的数的后面
		arr[end + 1] = temp;
		//代码执行到此位置有两种情况:
		//1.待插入元素找到应插入位置(break跳出循环到此)
		//2.待插入元素比当前有序序列中的所有元素都小(while循环结束后到此)
	}
	
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/518631.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

修改ro.debuggable用于调试安卓应用

一.Root 网上有很多root教程,这里推荐: 玩机必看&#xff01;带你入坑安卓刷机&#xff0c;小白也能看懂的ROOT基础指南来啦&#xff01; 很详细的介绍了Root的原理和方法,强烈推荐使用Magisk工具 可以使用命令adb shell getprop ro.debuggable查看ro.debuggable的值 二.Magi…

[MYSQL / Mariadb]数据库学习-表结构、键值(普通索引、主键、外键)

数据库学习-表结构、键值 回顾数据类型表结构字段约束条件&#xff08;限制字段赋值的&#xff09;例&#xff0c;建表并设置约束条件设置default列为0 修改表结构例添加新字段&#xff0c;并设置位置。修改字段类型change 修改字段名注意&#xff1a;在修改字段名或字段类型时…

Java中的 stop the world是什么?

一、概述&#xff1b; 从字面上讲&#xff0c;就是停止这个世界&#xff0c;看到这个字眼&#xff0c;就觉得这是可怕的事情&#xff0c;那到底什么是stop-the-world&#xff1f; stop-the-world&#xff0c;简称 STW&#xff0c;指的是 GC 事件发生过程中&#xff0c;会产生…

面试题30天打卡-day26

1、什么是 AOP&#xff1f;Spring AOP 和 AspectJ AOP 有什么区别&#xff1f;有哪些实现 AOP 的方式&#xff1f; AOP&#xff08;Aspect-Oriented Programming&#xff0c;面向切面编程&#xff09;是一种编程思想&#xff0c;可以在不修改原有业务逻辑代码的情况下&#xf…

srs 直播连麦环境搭建

一、简介 二、修改conf/rtc.conf 三、两个客户端加入房间 四、合流 4.1分别拉流尝试 4.2合流推流 4.3拉取合流 一、简介 直播连麦是指在one2one或one2many进行音视频通话&#xff0c;此时把他们的音视频流合在一起&#xff0c;通过rtmp等协议推送给大量用户做直播。 因此首选需…

Java面试(3)基础语法

基础语法 1. 标识符和关键字的区别是什么&#xff1f; 在我们编写程序的时候&#xff0c;需要大量地为程序、类、变量、方法等取名字&#xff0c;于是就有了 标识符 。简单来说&#xff0c; 标识符就是一个名字 。 有一些标识符&#xff0c;Java 语言已经赋予了其特殊的含义…

python带你用最简单嘚词云图分析出最热话题

前言 嗨喽&#xff0c;大家好呀~这里是爱看美女的茜茜呐 平常我们爬的评论、弹幕等等&#xff0c;数量又多又密&#xff0c;根本看不过来&#xff0c; 这时候数据分析的作用来了&#xff0c; 今天我们就试试用Python根据这些数据&#xff0c;来绘制词云图进行热词分析。 目录…

JUC-线程Callable使用与FutureTask源码阅读

JUC-线程Callable使用与FutureTask源码阅读 Callable简单使用 带返回值的线程(实现implements Callable<返回值类型>)&#xff0c;使用示例 import java.util.concurrent.Callable; import java.util.concurrent.ExecutionException; import java.util.concurrent.Fut…

STC32G12K128单片机的 moubus-rtu 主机测试工程

简介 STC32G12K128 是STC 推出的一款32位的 C251 的单片机。最近拿到一块官方申请的 屠龙刀-STC32G开发板&#xff0c;就用它的提供的库函数&#xff0c;查考安富莱提供的 modbus 例程移植了一个 modbus-rtu 主站的工程。 modbus-rtu host 移植注意点 modbus-rtu 功能配置 …

MapReduce序列化【用户流量使用统计】

目录 什么是序列化和反序列化&#xff1f; 序列化 反序列化 为什么要序列化&#xff1f; 序列化的主要应用场景 MapReduce实现序列化 自定义bean对象实现Writable接口 1.实现Writable接口 2.无参构造 3.重写序列化方法 4.重写反序列化方法 5.顺序一致 6.重写toStri…

您应该查看的5个ChatGPT WordPress插件

要创建免费网站&#xff1f;从易服客建站平台免费开始 500M免费空间&#xff0c;可升级为20GB电子商务网站 您应该查看的5个ChatGPT WordPress插件 发布于 2023年4月1日 ChatGPT 席卷了数字世界。作为内容创建者或营销者&#xff0c;您可能希望通过在您的网站上使用ChatGPT…

JimuReport - 积木报表(一款免费Web报表工具)

一款免费的数据可视化报表&#xff0c;含报表和大屏设计&#xff0c;像搭建积木一样在线设计报表&#xff01;功能涵盖&#xff0c;数据报表、打印设计、图表报表、大屏设计等&#xff01; Web 版报表设计器&#xff0c;类似于excel操作风格&#xff0c;通过拖拽完成报表设计。…

扫雷【C语言】

用C语言实现一个9X9的扫雷 test.c 测试部分 game.c 游戏实现部分 game.h 游戏声明部分 菜单部分 游戏部分 游戏部分包括创建一个扫雷的区域&#xff0c;在其中埋雷&#xff0c;玩家进行扫雷&#xff0c;判断扫雷是否成功 这里我i们定义行列&#xff0c;便于以后将其…

2023.05.12-使用Transformers Agents来一键调用千万个AI模型

1. 简介 简单来说&#xff0c;就是以前想要实现某一个AI功能&#xff0c;需要自己去网上搜索对应的模型、下载对应的权重才能使用。现在可以把中间的这些个环节都砍了&#xff0c;我们只需要告诉模型我们想要对某段文字或者某张图片进行什么操作&#xff0c;transformer就会自…

【经验贴】项目风险管理的有效方法

你遇见过“最奇葩”的项目风险是什么&#xff1f; 中级项目经理小李&#xff1a;我比较幸运? 项目一开始发现客户的需求不太明确&#xff0c;就识别出可能会有范围无限蔓延的风险&#xff0c;制定了一系列的应对措施&#xff0c;不出所料出了问题&#xff0c;最终还是将风险遏…

springboot整合redis,MongoDB,Elasticsearch(ES)

目录 springboot整合redis 连接Redis 字符串操作 哈希表操作 列表操作 集合操作 有序集合操作 lettcus与jedis的区别 springboot整合MongoDB 新增数据 查询数据 更新数据 删除数据 springboot整合Elasticsearch&#xff08;ES&#xff09; 创建ElasticsearchRepo…

区间预测 | MATLAB实现QRCNN-BiLSTM卷积双向长短期记忆神经网络分位数回归时间序列区间预测

区间预测 | MATLAB实现QRCNN-BiLSTM卷积双向长短期记忆神经网络分位数回归时间序列区间预测 目录 区间预测 | MATLAB实现QRCNN-BiLSTM卷积双向长短期记忆神经网络分位数回归时间序列区间预测效果一览基本介绍模型描述程序设计参考资料 效果一览 基本介绍 1.Matlab实现基于QRCNN…

Redis数据热迁移

1、redis数据热迁移&#xff0c;先通过redis-shake工具实现。 2、再通过redis-full-check检查迁移后的数据是否想同。 3、redis-shake版本下载&#xff1a; https://github.com/tair-opensource/RedisShake/releases 4、redis-full-check版本下载&#xff1a; https://github.c…

更简单的存和取bean

注解&#xff08;更简单存bean和取bean&#xff09;更简单的存bean&#xff08;使用类注解&#xff09;方法注解更简单的获取bean 注解&#xff08;更简单存bean和取bean&#xff09; 注解&#xff1a;声明和表示这个类或方法有某个能力。servlet的Web注解&#xff1b;实现路由…

2000多套微信小程序源码-史上最全的不同行业的源码集合

前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; 很多伙伴学习小程序不知怎么开始&#xff0c;我准备了2000多套小程序源码&#xff0c;基本覆盖各个行业&#xff0c;大家有需要的可以借鉴学习~ 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面…