C++基础算法③——排序算法(选择、冒泡附完整代码)

排序算法

1、选择排序

2、冒泡排序


1、选择排序


基本思想:从头至尾扫描序列,每一趟从待排序元素中找出最小(最大)的一个元素值,然后与第一个元素交换值,接着从剩下的元素中继续这种选择和交换方式,最终得到一个有序序列。

原始序列:45 32 65 98 5 42 11 61

  • ① 从序列中取出最小的元素5,将5同序列第一个元素交换,此时产生仅含一个元素的有序序列, 原序列减长度减1;
  • 结果:5 [11 32 42 45 65 98]
  • ② 从原序列中取出最小的元素11,将11同序列第一个元素交换,此时产生仅两个元素的有序序列,原序列减长度减1;
  • 结果:5 11 [32 42 45 65 98]
  • 同理重复同样的步骤:
  • 结果:5 11 32 [42 45 65 98]
  • 结果:5 11 32 42 [45 65 98]
  • 结果:5 11 32 42 45 [65 98]
  • 结果:5 11 32 42 45 65 [98]
  • 最后一个元素肯定是最大元素,排序直接生产一个有序的序列;
  • 最终结果:5 11 32 42 45 65 98

编程步骤:

  1. 定义数组,并输入值存到数组;
  2. 在原无序序列中,找到第一个最小值与该索引;
  3. 然后最小值的索引与原来不一致,就交换值;
  4. 重复②③步骤;
  5. 最后输出结果。
//1.选择排序算法
#include<iostream>
using namespace std;
int a[1000];
int main(){
	int n,min,index;
	cin>>n;
	for(int i=0;i<n;i++){ //1.输入值到数组 
		cin>>a[i];
	}
	for(int i=0;i<n;i++){ 
		min = a[i]; // 假设第一个为最小值 
		index = i; // 锁定最小值索引 
		for(int j=i+1;j<n;j++){ //逐个跟后面比对
			if(min>a[j]){ // 大于最小值,则更新值 
				min = a[j]; //更新值 
				index = j;  //更新索引 
			}
		}
		if(i!=index){ // 当索引不一致,代表最小值变了 
			swap(a[i],a[index]); //那就交换第一个值与最小值的位置。 
		} 
	}
	for(int i=0;i<n;i++){ //输出结果。 
		cout<<a[i]<<" ";
	}
	
	return 0;
} 

  1.  稳定性:待排序序列中如果存在与原来两端元素相等的元素,稳定性就可能被破坏。如[2,4,2,1,3],在排序完后,[1,2,2,3,4] 的a[2]与原来的a[2] 不一致,稳定性就被破坏了,所以选择排序是一种不稳定的排序算法
  2. 时间复杂度:选择排序的时间复杂度为O(n^{2})。
  3. 适用场景:待排序序列中,元素个数较少时。
     

2、冒泡排序

基本思想:相邻的元素两两比较,较大的数下沉(排后面),较小的数冒起来(排前面),这样一趟比较下来,最大(小)值就会排列在末端。整个过程如同气泡冒起,因此被称作冒泡排序。

原始序列:45 32 65 98 5 42 11 61

  • ① 从前往后比,根据相邻两个数比较,大的在后小的在前;
  • 第一趟排序:32 45 65 5 42 11 61 98;可以看到最大的数冒到最后面了。
  • 接着,排序比较次数可以少一次,因为有一个排好了;
  • 对无序:32 45 65 5 42 11 61 进行冒泡排序
  • 第二趟排序:32 45 5 42 11 61 65 98;
  • 第三趟排序:32 5 42 11 45 61 65 98;
  • 第四趟排序:5 32 11 42 45 61 65 98;
  • 第五趟排序:5 11 32 42 45 61 65 98;
  • 第六趟排序:5 11 32 42 45 61 65 98; 
  • 发现第六趟排序没有改变,就结束循环,排序结束!

编程步骤:

  1. 定义数组,并输入值存到数组;
  2. 比较相邻两个值,如果前比后大,就将两个值交换。
  3. 从第1个依次到最后1个,这一趟就排序完成。
  4. 重复②③步骤;直到比较没有再改变数值,就循环结束。
  5. 最后输出结果。
//2.冒泡排序 
#include<iostream>
using namespace std;
int a[1000];
int main(){
	int n;
	cin>>n;
	for(int i=0;i<n;i++){ //1.输入值到数组 
		cin>>a[i];
	}
	for(int i=n-1;i>0;i--){
		bool flag = true; //假设排好 
		for(int j=0;j<i;j++){
			if(a[j]>a[j+1]){ //比较相邻的值 
				swap(a[j],a[j+1]); //交换 
				flag = false; 
			}
		}
		if(flag==true) break; //某一轮排好,没有交换,提前终止。 
	}
	for(int i=0;i<n;i++){ //输出结果 
		cout<<a[i]<<" ";
	}
	return 0;
}

  1. 稳定性:在冒泡排序中,遇到相等的值,是不进行交换的,只有遇到不相等的值才进行交换,所以是稳定的排序方式。
  2. 时间复杂度:选择排序的时间复杂度为O(n^{2})。
  3. 适用场景:冒泡排序适用于数据量很小的排序场景,因为冒泡的实现方式较为简单。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Android Lancet Aop 字节编码修复7.1系统Toast问题(WindowManager$BadTokenException)

近期在Bugly上出现7.1以下设备上出现大量BadTokenException&#xff1a; android.view.WindowManager$BadTokenExceptionUnable to add window -- token android.os.BinderProxy6c0415d is not valid; is your activity running?报错堆栈&#xff0c;如下所示&#xff1a; …

Vite中ant design vue按需引入以及css预处理配置

这一篇主要讲一下 Vite 与 css 的配置。 1、Vite 按需加载 // vite.config.js import { defineConfig } from vite import Components from unplugin-vue-components/vite import {AntDesignVueResolver } from unplugin-vue-components/resolversexport default defineConfi…

【Java SE】变量的本质

目录一. 前言二. 变量(variable)2.1 性质2.2 变量类型2.2.1 核心区别2.3 变量的使用三. 总结一. 前言 一天一个Java小知识点&#xff0c;助力小伙伴更好地入门Java&#xff0c;掌握更深层次的语法。 二. 变量(variable) 2.1 性质 变量本质上就是代表一个”可操作的存储空间”…

【Spring-boot源码剥析】| 启动原理之侠客行篇

目录 一. 传说篇二. 快速启动原理三. 自动配置原理3.1 准备阶段3.2 配置阶段3.3 运行阶段三. Pefect Ending一. 传说篇 江湖传说,有一个神秘的江湖大侠,他名叫SpringBoot,擅长于开发出快速启动的应用程序。这个侠客的江湖名号传遍了整个江湖,无论是刀枪不入的武林高手还是阴…

谷歌外链怎么挑选?谷歌外链高质量平台有哪些?

我们都知道谷歌外链的分类是很多的&#xff0c;例如博客&#xff0c;B2B&#xff0c;社交媒体之类&#xff0c;还有论坛&#xff0c;书签等。 那谷歌外链怎么挑选&#xff1f; 答案是&#xff1a;选择GPB外链 下面我们来说一下关于谷歌外链的原理和技术分析。 我们先看下图…

基于“遥感+”融合技术在碳储量、碳收支、碳循环等多领域监测与模拟

以全球变暖为主要特征的气候变化已成为全球性环境问题&#xff0c;对全球可持续发展带来严峻挑战。2015年多国在《巴黎协定》上明确提出缔约方应尽快实现碳达峰和碳中和目标。2019年第49届 IPCC全会明确增加了基于卫星遥感的排放清单校验方法。随着碳中和目标以及全球碳盘点的现…

[ 漏洞复现篇 ] Joomla未授权访问Rest API漏洞(CVE-2023-23752)

&#x1f36c; 博主介绍 &#x1f468;‍&#x1f393; 博主介绍&#xff1a;大家好&#xff0c;我是 _PowerShell &#xff0c;很高兴认识大家~ ✨主攻领域&#xff1a;【渗透领域】【数据通信】 【通讯安全】 【web安全】【面试分析】 &#x1f389;点赞➕评论➕收藏 养成习…

linux中写定时任务

场景&#xff1a;我们生产环境中有大量的日志记录&#xff0c;但是我们的磁盘没有太大&#xff0c;需要定时清理磁盘 文章目录crond 定时任务详解安装定时任务crontab服务启动与关闭crontab操作crontab 命令test.sh查看日志丢弃linux中的执行日志Linux进入nano模式方式一方式二…

Linux之磁盘分区、挂载

文章目录一、Linux分区●原理介绍●硬盘说明查看所有设备挂载情况挂载的经典案例二、磁盘情况查询基本语法应用实例磁盘情况-工作实用指令一、Linux分区 ●原理介绍 Linux来说无论有几个分区&#xff0c;分给哪一目录使用&#xff0c;它归根结底就只有一个根目录&#xff0c;…

【JavaSE】类和对象(中)

类和对象&#xff08;中&#xff09;4. this引用4.1 为什么要有this引用4.2 什么是this引用4.3 this引用的特性5. 对象的构造及初始化5.1 如何初始化对象5.2 构造方法&#xff08;构造器&#xff09;5.2.1 概念5.2.2 特性5.3 默认初始化5.4 就地初始化6. 封装6.1 封装的概念6.2…

TypeScript(七)类

目录 前言 基本用法 实现接口 继承&#xff08;extends&#xff09; 基本用法 访问父类 重写父类&#xff08;override&#xff09; 只读关键字&#xff08;readonly&#xff09; 存取器&#xff08;getters/setters&#xff09; 静态成员&#xff08;static&#xff…

JVM学习.02 内存分配和回收策略

1、前言《JVM学习.01 内存模型》篇讲述了JVM的内存布局&#xff0c;其中每个区域是作用&#xff0c;以及创建实例对象的时候内存区域的工作流程。上文还讲到了关于对象存货后&#xff0c;会被回收清理的过程。今天这里就着重讲一下对象实例是如何被清理回收的&#xff0c;以及清…

STM32的推挽输出和开漏输出

文章目录 前言一、推挽输出二、开漏输出三、区别和适应场景总结前言 本篇文章将带大家了解STM32的推挽输出和开漏输出,并且学习这两个的区别,学习分别在什么时候使用这两个不同的输出方式。 在 STM32 微控制器中,GPIO(General Purpose Input/Output)模块是一个通用的输入…

【ChatGPT】教你搭建多任务模型

ChatGPT教你搭建多任务模型 You: tell me what’s your version of gpt ? ChatGPT: As an AI language model developed by OpenAI, I am based on the GPT (Generative Pretrained Transformer) architecture. However, my version is known as GPT-3.5, which is an updat…

单元测试、反射、注解、动态代理

&#x1f3e1;个人主页 &#xff1a; 守夜人st &#x1f680;系列专栏&#xff1a;Java …持续更新中敬请关注… &#x1f649;博主简介&#xff1a;软件工程专业&#xff0c;在校学生&#xff0c;写博客是为了总结回顾一些所学知识点 目录单元测试、反射、注解、动态代理单元测…

禁用非必需插件,让 IDEA 飞起

文章首发于个人博客&#xff0c;欢迎访问关注&#xff1a;https://www.lin2j.tech IDEA 为我们提供了众多的插件&#xff0c;但是这些插件并不都是必须的。如果电脑的性能不够强&#xff0c;反而会带来一些不必要的资源消耗。 因此这里整理了一些不常用的插件&#xff0c;可以…

uboot学习之Makefile之配置过程

uboot-1.1.6源码分析 分析配置过程: (1)安装交叉编译工具arm-linux-gcc&#xff0c;否则编译报错 (2)执行make canmb_config $(MKCONFIG) -a canmb ppc mpc5xxx canmb &#xff08;1&#xff09; MKCONFIG : $(SRCTREE)/mkconfig &#xff08;2&#xff09; &#xff08;…

【数据结构】顺序栈的C语言实现

​ ​&#x1f4dd;个人主页&#xff1a;Sherry的成长之路 &#x1f3e0;学习社区&#xff1a;Sherry的成长之路&#xff08;个人社区&#xff09; &#x1f4d6;专栏链接&#xff1a;数据结构 &#x1f3af;长路漫漫浩浩&#xff0c;万事皆有期待 文章目录栈1. 栈的概念1.1 栈…

刷题记录(2023.3.14 - 2023.3.18)

[第五空间 2021]EasyCleanup 临时文件包含考点 分析源码&#xff0c;两个特殊的点&#xff0c;一个是 eval&#xff0c;另一个是 include eval 经过了 strlen filter checkNums 三个函数 include 经过了 strlen filter 两个函数 filter 检测是否包含特定的关键字或字符 fun…

栈应用——逆波兰算法

个人主页&#xff1a;【&#x1f60a;个人主页】 系列专栏&#xff1a;【❤️数据结构与算法】 学习名言&#xff1a;传屐朝寻药&#xff0c;分灯夜读书 系列文章目录 第一章 ❤️ 学前知识 第二章 ❤️ 单向链表 第三章 ❤️ 递归 第四章 ❤️ 顺序栈 第五章 ❤️ 队列 文章目…
最新文章