拒绝水文!八大排序(二)【适合初学者】冒泡排序和选择排序

news2024/11/27 18:47:12

文章目录

  • 冒泡排序
  • 选择排序

大家好,我是纪宁。
这篇文章介绍八大排序中思路最简单,但效率也是最低的两种排序算法!

冒泡排序

冒泡排序,可以说是每个人在接触编程时最先学会的一种排序。

冒泡排序基本思想

冒泡排序(Bubble Sort)也是一种简单直观的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢"浮"到数列的顶端,但是在广泛适用后,冒泡排序可以用来排任意顺序。

动态图解

在这里插入图片描述
冒泡排序示例

假设要将已知无需数列按从小到大排列,将第一个元素与后面的元素依次比较,如果必后面的元素小,就与后面某个元素交换位置,然后用这个元素再依次往后比较,遇到比这个元素小的就与这个元素交换,直到最后一个元素,就完成了一趟冒泡排序,则最后一个元素一定是这个序列里最大的一个元素;然后开始第二趟冒泡排序,继续从第一个元素开始往后一次比较,遇到较小的就交换位置,直到倒数第二个数,那么最后倒数第二个数就变成了第二大的数…依次排完序列中所有的数,那么这个数的顺序就会变成从小到大,下面我用图来演示 :
在这里插入图片描述
一趟冒泡后,11就到了它该在的位置。
在这里插入图片描述
因为每次冒泡比较的次数都会递减,所以写代码的时候就要控制一下。

void BubbleSort(int* a, int n)//冒泡排序
{
	for (int i = 0; i < n; i++)
	{
		int flag = 0;//如果一趟后ret还等于0,说明数据已经有序
		for (int j = 0; j < n - i - 1; j++)
		{
			if (a[j] > a[j + 1])
			{
				Swap(&a[j], &a[j + 1]);
				flag = 1;
			}
		}
		if (flag == 0)
			break;
	}
}

因为冒泡排序在时间复杂度上确实不太占优,所以我们一般可以加一个 falg 用来判断即将进行调整的那部分序列是否已经有序,如果已有序,那就不用再进行‘冒泡’了,直接退出循环。
时间复杂度:O(N^2)
空间复杂度:O(1)
稳定性:稳定

选择排序

选择排序基本思想

每次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。

动态图解
在这里插入图片描述
每次‘选择’一个较大或者较小的数,放在指定位置。

这个思路非常简单,那就直接上代码了。

void SelectSort(int* a, int n)
{
	for (int j = 0; j < n; j++)
	{
		int mini = j;
		int maxi= n - j-1;
		for (int i = j; i < n-j; i++)
		{
			if (a[i] < a[mini])
			{
				mini = i;
			}
			if (a[i] > a[maxi])
			{
				maxi = i;
			}
		}
		Swap(&a[mini], &a[j]);
		if (maxi == j)
		{
			maxi = mini;//最大值如果在 j 这个位置的话,结果这个位置被换成了min 的值
		}
		Swap(&a[maxi], &a[n-1-j]);
	}
}

每次将最大值和最小值的下标找出来,与相应位置的数进行交换,但如果每次要直接找一个剩余序列的最大值和最小值的话,就需要判断最大值的下标对否恰好和最小值需要交换位置的下标重合,防止大的数据被‘调包’。

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

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

相关文章

前言技术 VScode + 其他插件-2

一、扩展插件 1.1 chinese 作用&#xff1a;使得软件变成中文显示 1.2 prettier 作用&#xff1a;格式化代码 需要多重配置&#xff1b;看视频 第一步&#xff1a;安装 第二步&#xff1a;软件设置 第三步&#xff1a;查询 save , 修改保存时自动对齐格式&#xff0c;打✔…

英国B2C数字钱包提供商【Hyperjar】完成2400万美元A轮融资

来源&#xff1a;猛兽财经 作者&#xff1a;猛兽财经 猛兽财经获悉&#xff0c;总部位于英国伦敦的B2C数字钱包提供商Hyperjar今日宣布已完成2400万美元A轮融资。 本轮轮融资由Susquehanna Private Equity Investments领投&#xff0c;安大略省医疗保险计划&#xff08;Health…

全网最全Python系列教程(非常详细)---Python注释讲解(学Python入门必收藏)

&#x1f9e1;&#x1f9e1;&#x1f9e1;这篇是关于Python中注释的讲解&#xff0c;涉及到以下内容&#xff0c;欢迎点赞和收藏&#xff0c;你点赞和收藏是我更新的动力&#x1f9e1;&#x1f9e1;&#x1f9e1; 1、什么是注释&#xff1f; 2、注释的特性&#xff1f; 3、注释…

lv6 嵌入式开发-Flappy bird项目

目录 1 项目功能总结 2 知识储备&#xff1a; 3 项目框图 4 Ncurses库介绍 做Flappy bird项目有什么用&#xff1f; 1. 复习、巩固c语言知识 2. 培养做项目的逻辑思维能力 3. 具备开发简单小游戏的能力 学会了Flappy bird项目&#xff0c;贪吃蛇和推房子两款小游戏也可…

前端JavaScript入门到精通,javascript核心进阶ES6语法、API、js高级等基础知识和实战 —— Web APIs(四)

思维导图 一、日期对象 1.1 实例化 实例化&#xff0c;默认得到当前时间&#xff0c;也可以指定时间 1.2 日期对象方法 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible&q…

Vue3.0跨端Web SDK访问微信小程序云储存,文件上传路径不存在/文件受损无法显示问题(已解决)

整理需求&#xff1a; 需要vue3.0作为pc端的后台管理来连接微信小程序客户端需要Web SDK的引入&#xff0c;实现vue3.0接入云开发环境需要以云环境作为线上服务器&#xff0c;将vue3.0上传的本地文件通过云环境进入云储存&#xff0c;并将文件在云端生成云端快捷访问路径及htt…

仅招聘 45 岁以上程序员,是清流还是陷阱?

刚才刷新闻的时候&#xff0c;刷到这么一个招聘&#xff0c;仅限 45 岁以上的程序员。 乍一看&#xff0c;这公司挺人性化的&#xff0c;仅招聘 45 岁以上的程序员&#xff0c;而且体谅大龄程序员身体不如年轻人&#xff0c;尽量不用加班&#xff0c;只做产品预研。 这么写招聘…

计算机毕设 大数据全国疫情数据分析与3D可视化 - python 大数据

文章目录 0 前言1 课题背景2 实现效果3 设计原理4 部分代码5 最后 0 前言 &#x1f525; 这两年开始毕业设计和毕业答辩的要求和难度不断提升&#xff0c;传统的毕设题目缺少创新和亮点&#xff0c;往往达不到毕业答辩的要求&#xff0c;这两年不断有学弟学妹告诉学长自己做的…

淘宝天猫复制商品链接粘贴到草柴查优惠券iPhone苹果手机粘贴弹窗怎么关闭?

经常在淘宝、天猫、京东网购&#xff0c;挑选商品后复制链接&#xff0c;到草柴APP查询要购买商品的优惠券和返利&#xff0c;iPhone苹果手机每次粘贴复制的商品链接都弹窗提示特别烦人。接下来分享如何关闭草柴APP复制粘贴提醒的弹窗&#xff1b; 如何永久关闭iPhone苹果手机复…

EM聚类(下):用EM算法对王者荣耀英雄进行划分

⭐️⭐️⭐️⭐️⭐️欢迎来到我的博客⭐️⭐️⭐️⭐️⭐️ &#x1f434;作者&#xff1a;秋无之地 &#x1f434;简介&#xff1a;CSDN爬虫、后端、大数据领域创作者。目前从事python爬虫、后端和大数据等相关工作&#xff0c;主要擅长领域有&#xff1a;爬虫、后端、大数据…

计算机视觉——飞桨深度学习实战-起始篇

后面我会直接跳到实战项目&#xff0c;将计算机视觉的主要任务和目标都实现一遍&#xff0c;但是需要大家下去自己多理解和学习一下。例如&#xff0c;什么是深度学习&#xff0c;什么是计算机视觉&#xff0c;什么是自然语言处理&#xff0c;计算机视觉的主要任务有哪些&#…

【机器学习】熵和概率分布,图像生成中的量化评估IS与FID

详解机器学习中的熵、条件熵、相对熵、交叉熵 图像生成中常用的量化评估指标通常有Inception Score (IS)和Frchet Inception Distance (FID) Inception Score (IS) 与 Frchet Inception Distance (FID) GAN的量化评估方法——IS和FID&#xff0c;及其pytorch代码

CISSP学习笔记: 安全通信和网络攻击

第十二章 安全通信和网络攻击 12.1 网络与协议安全机制 TCP/IP是主要协议&#xff0c;也存在许多安全缺陷 12.1.1 安全通信协议 为特定应用通信信道提供安全服务的协议被称为安全通信协议常见的安全通信协议&#xff1a; IP简单秘钥管理&#xff08;SKIP&#xff09;&#…

《Jetpack Compose从入门到实战》第九章 Accompanist 与第三方组件库

目录 AccompanistSystemUiControllerPagerSwipeRefreshFlow LayoutInsets LottieCoilAsyncImageSubcomposeAsyncImageAsyncImagePainter Accompanist 最新可用版本accompanist官方文档 SystemUiController 依赖&#xff1a;implementation “com.google.accompanist:accompa…

力扣 -- 494. 目标和(01背包)

参考代码&#xff1a; 未优化的代码&#xff1a; class Solution { public:int findTargetSumWays(vector<int>& nums, int target) {int nnums.size();int sum0;for(const auto& e:nums){sume;}//aimbsum//aim-btarget//aim(sumtarget)/2int aim(sumtarget)/2…

7、Nacos服务注册服务端源码分析(六)

本文收录于专栏 Nacos 中 。 文章目录 前言一、Nacos的任务设计中有哪些关键类&#xff1f;定义任务&#xff1a;NacosTask执行任务&#xff1a;NacosTaskProcessor执行引擎&#xff1a;NacosTaskExecuteEngine 二、PushDelayTaskExecuteEngine、NacosExecuteTaskExecuteEngine…

python操作.xlsx文件

from openpyxl import load_workbook from openpyxl.styles import Font,colors, Alignment from openpyxl.styles import Border, Side #打开已经存在的Excel workbook load_workbook(filenameC:\\Users\\yh\\Documents\\测试.xlsx) #创建表&#xff08;sheet&#xff09;,插…

崇州街子古镇2023中秋国庆双节第四天一瞥

今天已是2023中秋国庆双节第四天&#xff0c;上午近10时许&#xff0c;笔者继昨下午又走出寄居养老成都市崇州街子古镇青城神韵小区大门&#xff0c;看看节日气氛是否仍然浓厚...... 笔者手机拍摄&#xff1a;国旗飘扬的青城神韵小区一号大门 笔者手机拍摄&#xff1a;街子古镇…

了解”变分下界“

“变分下界”&#xff1a;在变分推断中&#xff0c;我们试图找到一个近似概率分布q(x)来逼近真实的概率分布p(x)。变分下界是一种用于评估近似概率分布质量的指标&#xff0c;通常用来求解最优的近似分布。它的计算涉及到对概率分布的积分或期望的估计