C++算法初级5——排序1(选择、插入、冒泡)

C++算法初级5——排序1

文章目录

  • C++算法初级5——排序1
    • 选择排序
    • 冒泡排序
    • 插入排序

本文介绍排序的几种方法,默认均为从小到大排序,内容来源参考boyuai

选择排序

基本思想:

  1. 将1-n位的元素依次归位
  2. 当归位第i个元素时,需要选出第i位元素~第n位元素的最小值,和第i位元素互换位置,此时此时,1到i的元素分别为第1小到第i小的元素。
  3. 当第n个元素归位完毕以后,整个序列的排序过程结束。

代码

void selectSort(int a[], int n)
{
    for (int i=0;i<n;i++)
    {
        int min = i;
        for (int j=i+1;j<n;j++)
        {
            if (a[j] < a[min])
            {
                min = j;
            }
        }
        if (min != i)
        {
            int temp = a[i];
            a[i] = a[min];
            a[min] = temp;
        }
    }
    // 输出
    for (int i=0;i<n;i++)
    {
        cout << a[i] << " ";
    }
}

复杂度 O ( n 2 ) O(n^2) O(n2)

冒泡排序

基本思想:

  1. 冒泡排序和选择排序一样,都是将原问题转换为长度减一的子问题的过程。
  2. 冒泡排序分为n-1个阶段,每个阶段通过“冒泡”的过程,将未排序序列中的最大值移动到最后一位。
  3. 冒泡的过程,具体是通过一段连续交换过程使得最大元素被“传送”到最后一位。
  4. 冒泡排序的思路:

冒泡排序分为n-1个阶段。

在第1个阶段,通过“冒泡”,我们将前n个元素的最大值移动到序列的最后一位。此时只剩前n-1个元素未排序。

在第i个阶段,此时序列前n-i+1个元素未排序。通过“冒泡”,我们将前n-i+1个元素中的最大值移动到最后一位。此时只剩前n-i个元素未排好序。

对一段序列从左到右连续做交换操作的代码:

if (a[i] > a[i + 1]) swap(a[i], a[i + 1]);

代码

//冒泡排序
void bubbleSort(int a[],int n)
{
    for(int i=0;i<n-1;i++) // 一共n-1个阶段,在第i个阶段,未排序序列长度从0到n-i-1。
    {
        for(int j=0;j<n-i-1;j++) //循环的角标只到n-i-2,因为会考虑j+1即n-i-1
        {
            if(a[j]>a[j+1])
            {
                swap(a[j],a[j+1]);
            }
        }
    }
    //输出  
    for(int i=0;i<n;i++)
    {
        cout<<a[i]<<" ";
    }
}

复杂度 O ( n 2 ) O(n^2) O(n2)

插入排序

插入排序的基本思想就是不断扩展有序序列的长度。

具体方式是对于一个有序序列,如果想在其中新加入一个元素,就应通过插入操作找出正确的插入位置,并且将插入位置空出来,然后插入新元素。

插入操作的基本思想就是从后向前不断“试探”分界线的位置。

一个合法的分界线,分界线前的元素需满足小于等于新元素大小,分界线后元素需满足大于新元素大小。所以寻找分界线的过程,就是不断把当前在分界线前,但本应该在分界线后的元素向后移动。

插入操作的算法描述:

假设序列1~(i-1)已经有序, 从i到1枚举分界线的下标j;

如果分界线前面的元素a[j-1]大于x,说明a[j-1]应该在分界线后面。所以将a[j-1]移动到a[j],分界线前移变成j-1。

如果分界线前面没有元素(j=1),就将x放在数组第1位。否则如果碰到一个j-1号元素小于等于x,说明分界线位置正确,就将x插到j位。

代码:

// 插入排序
void insertSort(int a[],int n)
{
    for(int i=1;i<n;i++) // 从第二个元素开始,第一个元素认为是有序的
    {
        int temp = a[i]; // 保存当前元素
        int j = i-1; // 从当前元素的前一个元素开始
        while(j>=0 && a[j]>temp) // 从后往前遍历,直到找到比当前元素小的元素
        {
            a[j+1] = a[j]; // 后移
            j--;
        }
        a[j+1] = temp; // 插入
    }
    // 输出
    for(int i=0;i<n;i++)
    {
        cout<<a[i]<<" ";
    }
}

复杂度 O ( n 2 ) O(n^2) O(n2)

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

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

相关文章

Hive小文件问题

1、小文件产生的原因 数据源本身有很多小文件&#xff1a;reduce数量多导致生成的小文件增多&#xff1a;使用动态分区导致小文件增多&#xff1a; 2、小文件危害 HDFS内存资源消耗过大&#xff0c;并限制了数据存储规模&#xff1a;在HDFS中&#xff0c;具体的文件保存在da…

静态链表常用操作(节点计数/查找/增加/删除)

1.封装计算链表节点个数的API 代码心得&#xff1a; cnt是count的缩写&#xff0c;用来计数。节点&#xff0c;我们一般指的是链表中数据的地址&#xff08;指针&#xff09;。比如节点1就是第一个结构体的地址&#xff0c;节点2就是第2个结构体的地址&#xff0c;以此类推。…

Adaptive AUTOSAR架构和特性介绍

概述 本文主要内容分为两章节。第一章节简要介绍了AUTOSAR的软件架构,设计理念以及方法论,对Classic Platform和Adaptive Platform做了简单的比较。第二章主要介绍了Adaptive Platform的特性。 第一章 AUTOSAR架构介绍 AUTOSAR(AUTomotive Open System ARchitecture)是汽车…

MySQL性能优化(四)性能优化总结

文章目录连接优化服务端链接优化客户端连接优化配置的优化架构优化数据库高可用&#xff1a;数据库慢查询慢查询日志profiling工具表结构和存储引擎的优化存储引擎&#xff1a;表结构SQL与索引的优化案例- 执行计划 ExplainID序号select type查询类型type 针对单表的访问方法Sy…

ChatGPT 与 MindShow 一分钟搞定一个PPT

前言 PPT制作是商务、教育和各种场合演讲的重要组成部分。然而&#xff0c;很多人会花费大量时间和精力在内容生成和视觉设计方面。为了解决这个问题&#xff0c;我们可以利用两个强大的工具——ChatGPT和MindShow&#xff0c;来提高制作PPT的效率。 一、ChatGPT 与 MindShow…

Linux操作系统ARM体系结构处理器机制原理与实现

ARM 的概念ARM(Advanced RISC Machine)&#xff0c;既可以认为是一个公司的名字&#xff0c;也可以认为是对一类微处理器的通称&#xff0c;还可以认为是一种技术的名字。ARM 公司并不生产芯片也不销售芯片&#xff0c;它只出售芯片技术授权。其合作公司针对不同需求搭配各类硬…

ChatGPT惨遭围剿?多国封杀、近万人联名抵制……

最近&#xff0c;全世界燃起一股围剿ChatGPT的势头。由马斯克、图灵奖得主Bengio等千人联名的“暂停高级AI研发”的公开信&#xff0c;目前签名数量已上升至9000多人。除了业内大佬&#xff0c;欧盟各国和白宫也纷纷出手。 最早“动手”的是意大利&#xff0c;直接在全国上下封…

SwinTransformer学习

参考&#xff1a; Swin-Transformer网络结构详解 https://blog.csdn.net/qq_37541097/article/details/121119988 x.1 前言 x.1.1 特点 它具有两个特点&#xff1a; 采用类似卷积神经网络中的层次构建方法采用W-MSA和SW-MSA全新的位置编码方式 层次构建方法 相比较于ViT&…

从零开始学Python第12课:常用数据结构之集合

在学习了列表和元组之后&#xff0c;我们再来学习一种容器型的数据类型&#xff0c;它的名字叫集合&#xff08;set&#xff09;。说到集合这个词大家一定不会陌生&#xff0c;在数学课本上就有这个概念。如果我们把一定范围的、确定的、可以区别的事物当作一个整体来看待&…

有符号加法运算

实例 module Signed_add(input signed [3:0] a,input signed [3:0] b,output signed [4:0] out );wire signed [3:0] a1;wire [3:0] a2;wire signed [3:0] b1;wire [3:0] b2;wire signed [4:0] out1;wire [4:0] out2;wire signed [4:0] out3;wire …

五步教你如何注册一个公司网站

在今天的数字化时代&#xff0c;每个公司都需要一个强大的线上存在感。注册一个公司网站是实现这一目标的第一步。但是&#xff0c;对于许多公司而言&#xff0c;这个过程可能有些困难。因此&#xff0c;在本文中&#xff0c;我将介绍一个五步计划&#xff0c;让您轻松注册一个…

【SpringBoot】面试组合技-天羽屠龙舞,SpringBootApplication注解的作用是什么?SpringBoot怎么实现自动装配的?

SpringBoot源码下载地址&#xff1a;https://github.com/spring-projects/spring-boot/tags 文章目录&#x1f35f;下载源码&#x1f357;环境准备&#x1f356;注解解析&#x1f35d;SpringBootConfiguration注解&#x1f35b;EnableAutoConfiguration注解&#x1f364;AutoC…

AD20的PCB布线规则设定

目录 1、最小安全间距 2、线宽规则 3、过孔 4、盖油工艺设计 5、内电层焊盘模式设置 6、反焊盘间距设计 7、焊盘与覆铜连接类型 AD20的规则库设定是PCB布线的首要工作&#xff0c;在布线初期就要设置好&#xff0c;布线的过程中还需要动态的变更&#xff0c;因此本篇总结了PCB的…

【Linux】之nc命令(连接与扫描指定端口、监测服务端口的使用情况)解析、详解实例、邮件告警

&#x1f341;博主简介 &#x1f3c5;云计算领域优质创作者   &#x1f3c5;华为云开发者社区专家博主   &#x1f3c5;阿里云开发者社区专家博主 &#x1f48a;交流社区&#xff1a;运维交流社区 欢迎大家的加入&#xff01; 文章目录nc命令简介nc命令的安装nc命令语法格式…

【K8S系列】Pod详解

目录 序言 1 前言 2 为什么需要pod 3 什么是Pod&#xff1f; 3.1 Pod的组成 3.2 Pod的用途 3.3 Pod的生命周期 3.4 Pod的特点 4 Pod的使用 5 结论 序言 任何一件事情&#xff0c;只要坚持六个月以上&#xff0c;你都可以看到质的飞跃。 今天学习一下K8s-Pod相关内容&…

SQL删除记录方式汇总

大家好&#xff0c;我是RecordLiu! 今天给大家分享的是SQL中删除记录的不同方式&#xff0c;我会用几道真题来给大家讲解。 题目直达链接&#xff1a; 牛客网在线SQL编程练习 切换到SQL篇就能看到了。 我这里先列下知识点&#xff1a; SQL中进行简单删除的语法是什么?SQL…

关于AI 绘画,我给你总结了一份详细的关键词(Prompt 知识)

写在前面 随着人工智能技术的不断发展&#xff0c;越来越多的应用场景被发掘。其中&#xff0c;AI绘画是一种新兴的领域&#xff0c;其应用范围涵盖了数字媒体、游戏设计、动画制作、艺术创作等多个领域。在本文中&#xff0c;我们将介绍AI绘画的基本概念、发展历程、技术原理…

最新JavaFx JDK17如何正确的打出可以使用的exe软件包

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录前言一、提前需要准备&#xff1f;二、打包步骤1.现将module-info.java删除 选中module-info.java 鼠标右键 Refactor 然后选择safe deleted2.编辑设置 路径 Run/edi…

教你安装各种应用环境-Nodejs

因为最近做项目用到了Nodejs&#xff0c;如果直接下那么用到的就是最新版本。我要用以前的版本这就让我产生了写这篇文章的想法。 安装官网 官网&#xff1a;https://nodejs.org/en 如果安装最新的直接下载安装就行&#xff0c;流程可以看后面。 流程 其他版本点击"O…

年薪30W+,待遇翻倍,我的经历值得每个测试人借鉴

从自考大专到出走公司&#xff0c;从半年无业露宿深圳北站&#xff0c;从8k…到11.5k…再到20k&#xff0c;我的经历值得每个测试人借鉴 或许学历并没有那么重要 12年高考之后&#xff0c;在朋友的介绍下&#xff08;骗了过去&#xff09;&#xff0c;没有好好的读大学&#x…
最新文章