1 - 选择排序与冒泡排序

2023-11-11

排序算法

选择排序

/**
 * 选择排序的思路 :
 * 依次遍历数组,每次遍历数组的时候,记录当前未排序的最小值的索引
 * 让最小值的索引和待排序的数组的第一个元素进行交换,然后继续重复操作
 * 直到所有元素都排序
 */
public class SelectionSort {
  public static void selectionSort(int[] arr) {
    // 数组为空或已有序,直接返回
    if (arr == null || arr.length < 2) {
      return;
    }
    for (int i = 0; i < arr.length; i++) {
      // 记录当前未排序的最小值
      int minIndex = i;
      for (int j = i + 1; j < arr.length; j++) {
        // 找出未排序中最小值的索引
        if (arr[j] < arr[minIndex]) {
          minIndex = j;
        }
      }
      // 交换
      swap(arr, i, minIndex);
    }
  }

  /**
   * 数组元素的交换方法,交换数组 i 和 j 处的值
   *
   * @param arr 数组
   * @param i   数组索引 i
   * @param j   数组索引 j
   */
  public static void swap(int[] arr, int i, int j) {
    int temp = arr[i];
    arr[i] = arr[j];
    arr[j] = temp;
  }
}

复杂度分析

时间复杂度

O ( n 2 ) O(n^2) O(n2)

空间复杂度

O ( 1 ) O(1) O(1)


冒泡排序

/**
 * 冒泡排序的思路 :
 * 从第 i = 0 处的元素开始,依次和 i + 1 做对比,如果 i 处的元素值大于 i + 1 处
 * 则交换元素,即依次让未排序中的元素的最大元素从左往右边冒泡过去。
 */
public class BubbleSort {

  public static void bubbleSort(int[] arr) {
    if (arr == null || arr.length < 2) {
      return;
    }
    for (int i = 0; i < arr.length; i++) {
      // 每次从索引 0 处开始
      for (int j = 0; j < arr.length - i - 1; j++) {
        // 不断让较大的值上浮
        if (arr[j] > arr[j + 1]) {
          swap(arr, j, j + 1);
        }
      }
    }
  }

  /**
   * 数组元素的交换方法,交换数组 i 和 j 处的值
   *
   * @param arr 数组
   * @param i   数组索引 i
   * @param j   数组索引 j
   */
  public static void swap(int[] arr, int i, int j) {
    int temp = arr[i];
    arr[i] = arr[j];
    arr[j] = temp;
  }
}

复杂度分析

时间复杂度

O ( n 2 ) O(n^2) O(n2)

空间复杂度

O ( 1 ) O(1) O(1)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

1 - 选择排序与冒泡排序 的相关文章

  • PolarDB-X 私有协议2.0

    本文主要介绍私有协议2 0 也即XRPC的背景 总体设计 相关技术实现细节和性能测试结果 私有协议作为解决 PolarDB X 中计算节点和存储节点复杂通信需求的技术手段 在 PolarDB X 2 0 公共云版上线初期就作为重要的功能一起
  • maven 报错 Failed to execute goal on project ...: Could not resolve dependencies for project ...

    网上看了很多博客 都是说在根工程那里clean install一下就可以了 根本原因还是要看Could not resolve dependencies for project 我这边是common工程打包的时候打成了war包 其他工程都是
  • 最全IO流解析——IO流的骚操作

    Java中是通过流的方式对数据进行操作 用于操作流的类都在IO包中 IO流用来处理设备之间的数据传输 IO流按照流向分为输入流和输出流 按照操作的数据分为字节流和字符流 字节流可以操作任何数据 因为在计算机中任何数据都是以字节的形式存储的
  • Centos7的iso everything与DVD以及Live的区别

    DVD ISO 可以用安装程序安装的所有安装包 推荐镜像 Netinstall iso 从网络安装或者救援系统 Everything iso 包含centos7的一套完整的软件包 可以用来安装系统或者本地镜像 GnomeLive iso G
  • Mac下github的基本使用(有详细过程)

    一 github准备 1 注册github账号 https github com 按照提示进行注册 2 查看git版本 由于macOS默认安装了git 在终端输入 git v 3 设置username和email username随便输入一
  • 如何防止uniswap和pancakeswap夹子机器人

    被机器人夹是通俗说法 实际就是 front running 抢先提前交易 具体就是机器人在链上嗅探到你有买入行为的时候 他立刻买 gas给的比你高 快你一步确认 这样你成交价就高了 因为交易所有滑点 所以你依旧会以高一点的价格成交并且再将价
  • 区块链简单实现之p2p网络多节点同步

    区块链简单实现之p2p网络多节点同步 将区块保存为json文件 节点 不确定性 区块里保存节点信息 并未向所有节点广播 简单模拟 广播的代码 实现效果 完整的代码 承接上文 区块链的简单实现 我们已经实现了一个简单的区块链数据结构 现状 区
  • wasm + ffmpeg实现前端截取视频帧功能

    有没有那么一种可能 在前端页面处理音视频 例如用户选择一个视频 然后支持他设置视频的任意一帧作为封面 就不用把整一个视频上传到后端处理了 经过笔者的一番摸索 基本实现了这个功能 一个完整的demo ffmpeg wasm截取视频帧功能 支持
  • paddle-pytorch API对应表

    PyTorch API名称 对应Paddle API torch set default dtype paddle set default dtype torch get default dtype paddle get default d
  • linux下mysql-connector-c++连接远程服务器失败

    最近在将windows项目移植到linux下 碰到诸多问题 先谈mysql connector c 连接远程服务器失败问题 在windows下 sql Driver driver sql mysql get driver instance
  • 因果推理相关的图神经网络研究

    本文介绍两篇因果推理相关的图神经网络研究工作 一 OOD推荐系统下的因果表征学习 本文介绍了什么是推荐系统中的Out of Distribution OOD 问题 并从因果的角度提出了一种解决OOD问题的表示学习方式 文章链接 https
  • 关于xinput1_3.dll丢失的详细解决方法

    xinput1 3 dll是电脑文件中的dll文件 动态链接库文件 如果计算机中丢失了某个dll文件 可能会导致某些软件和游戏等程序无法正常启动运行 并且导致电脑系统弹窗报错 在我们打开软件或者游戏的时候 电脑提示xinput1 3 dll
  • Windows10下安装Linux子系统

    Windows10下安装Linux子系统 版本说明 版本 作者 日期 备注 0 1 ZY 2019 7 9 初稿 目录 文章目录 Windows10下安装Linux子系统 版本说明 目录 一 初衷 二 资料收集 三 官方安装说明 1 准备
  • 5.0结构型模式—概述

    结构型模式描述如何将类或对象按某种布局组成更大的结构 它分为类结构型模式和对象结构型模式 前者采用继承机制来组织接口和类 后者釆用组合或聚合来组合对象 由于组合关系或聚合关系比继承关系耦合度低 满足 合成复用原则 所以对象结构型模式比类结构
  • 国庆假期将至,拓世AI智能规划行程,让您轻松游遍全球热门景点!

    卡夫卡曾说 人不是活几年 几月 几天 几小时 而只活几个瞬间 亲赴一场与美景的邂逅 便是去找寻人生里的瞬间之美 转眼已是九月 正是人间好时节 挥别工作和生活的烦闷 奔向辽阔的天地中 即将到来的国庆长假 你需要来一场说走就走的旅行 将所有烦恼
  • 动态数据源配置druid+mybatis

    本方案不限数据库数量完全动态配置 支持不同的数据库部署在不同的服务器上 mybatis plus没测试 下个版本用oracle配的时候尝试plus 一 这次我们使用Mysql 本地现在有两个个数据库用于测试 如图 二 下一步我们看一下Dru
  • LintCode入门题目

    37 反转一个3位整数 反转一个只有3位数的整数 样例 样例 1 输入 number 123 输出 321 样例 2 输入 number 900 输出 9 注意事项 你可以假设输入一定是一个只有三位数的整数 这个整数大于等于100 小于10
  • 表空间的操作

    1 创建表空间 create tablespace tablespace name datafile filepath size filesize autoextend on next autosize maxsize filemaxsiz
  • rule34服务器不稳定,rule34网站

    rule34网站 内容精选 换一换 网站后台数据录入完成后 您需要为您的网站设置便于客户浏览和操作的前台显示界面 本章节主要通过已安装的网站模板指导您完成PC版 手机版网页的制作 以及网站数据的备份 已完成网站后台的设置 并且成功绑定域名

随机推荐

  • 用PyCharm打开已有代码

    一 代码的打开 1 在当前环境 打开新的项目 2 点open 打开文件存放的位置 3 trust Project 4 this window or new window 一般选this window 5 解决代码中的问题 1 一定要解决 2
  • python3 scrapy爬取微信公众号及历史信息V1.0

    环境 python3 scrapy 目的 写这篇文章主要是做一下纪念 毕竟是搞了快两天的东西了 今天加大了量 使用scrapy爬取100多个微信公众号 然后出现IP被封的情况下 当然了 这种情况并不是没有办法解决 只需要在scrapy中进行
  • Java SE学习笔记(五)——数组

    1 包装类 Wrapper Class 针对原生数据类型的包装 所有的包装类 8个 都位于java lang包下 对应8个包装类分别是 Byte Short Integer Long Float Double Character Boole
  • 如何设计一个“正确”的后端接口

    一个后端接口正常情况下会包含 接口地址url 接口的请求方式 get post 请求数据 相应数据 在此记录一下如何构建一个完整的后端接口的过程 无论一个简单还是复杂的接口 无论是对外开放的接口还是http接口 参数校验是比不可少的 因为调
  • 做web开发,怎么能不懂cookie、session和token呢?

    如果把人体比作一个web系统的话 cookie session和token就好像人体的经络和血管一样 而web系统中的数据 就好像人体的血液一样 血液依靠着血管在人体内流动 就如数据根据cookie和session机制在web系统中流动一样
  • 活动报名

    活动议程 日期 8月11日 周五 时间 主题 14 30 14 35 开场简介 吴琦 阿德莱德大学副教授 青源会会员 14 35 15 20 实际应用中的通用视觉与语言方法 聚焦于视觉与语言导航任务 乔滟媛 阿德莱德大学博士后研究员 15
  • vue_02_数据绑定

    1 单向数据绑定 语法 v bind href xxx 或简写为 href 特点 数据只能从 data 流向页面
  • 大乐透分析软件

    大乐透分析软件 1 使用python从网站中爬取所有的大乐透中奖号码 2 使用c 分析红球 蓝球 组合重复出现次数 3 输入红球 蓝球判断历史中奖次数和出现次数 python爬取代码 import os import re import t
  • 【OpenCV图像处理】1.26 直方图反向投影(Back Projection)

    1 相关理论 反向投影 反向投影是反映直方图模型在目标图像中的分布情况 简单点说就是用直方图模型去目标图像中寻找是否有相似的对象 通常用HSV色彩空间的HS两个通道直方图模型 反向投影 步骤 1 建立直方图模型 2 计算待测图像直方图并映射
  • 【SqlServer】如何实现用一个表中的数据修改另一个表中的数据?

    问 我想根据一定的条件实现用一个表中的数据修改另一个表中的数据 这该如何办到呢 答 这有何难 用SQL语言UPDATE嘛 表一 student stu id stu name stu age 1 aa 20 2 bb 21 3 cc 22
  • 小程序跳转外链

    注意 个人类型和海外类型的小程序不支持 web view 标签 直接跳转显示如下页面 解决方案1 将外链地址配置在微信公众的白名单中即可正常跳转 解决方案2 新建一个 fbec number collection用web view承载它以后
  • Oracle-Rman详解

    RMAN 使用详解 一 连接方式 一 连接本地数据库 oracle oracle rman target 二 连接远程数据库 oracle oracle rman target sys oracle orcl 二 基本指令 一 执行 SQL
  • Java线程(从基本概念到线程安全,超详细加大量代码实现)

    线程 线程基本概念 一个线程是一个程序内部的顺序控制流 线程和进程 每个进程都有独立的代码和数据空间 进程上下文 进程切换的开销大 线程 轻量的线程 同一类线程共享和数据空间 每个线程有独立的运行栈和程序计数器 PC 线程切换的开销小 多进
  • 计算机视觉(三):神经网络最优化过程

    计算机视觉笔记总目录 1 最优化 Optimization 定义 最优化是寻找能使得损失函数值最小化的参数 W W W的过程 注 给的是损失优化问题的一个简单定义 并不是完整的最优化数学定义 方法 问题陈述 这节的核心问题是 给定函数 f
  • Search in rotated sorted Array

    算法框架和普通折半查找一样 主要变量就是begin end mid 考虑的区间也一样 都是 begin mid mid mid end 这三种情况 只是判断条件的部分不同 1 若target A mid 返回mid 2 之后只有两种情况 t
  • 跨时钟域传输数据——单bit和多bit信号(总结)

    文章目录 前言 一 慢时钟域到快时钟域 1 单bit信号 2 多bit信号 二 快时钟域到慢时钟域 1 单bit信号 2 多bit信号 三 多bit信号跨时钟域传输 1 多个信号合并 2 多周期路径 Multi cycle Path MCP
  • MySql的增删改查操作(初学者个人心得)

    引言 在上周粗略的学习了有关MySql的相关基础内容 为了方便自己复习 特写下这篇个人心得 来记录MySql有关增删改查操作的内容 MySql学习中最重要的一部分 启动数据库 DOS命令进入mysql的bin文件夹 net start my
  • Linux服务器安全 SSH 用户密钥认证登录

    一 SSH基本简介 SSH 提供两种安全验证方式 1 基于口令 客户端使用账号和口令登录服务器 所有传输数据都会被加密 但可能存在伪造服务器冒充真正的服务器与客户端进行交互 不能避免中间人攻击 2 基于密钥 使用一对密钥 私钥 公钥 将公钥
  • ReentrantLock的使用和原理详解

    文章目录 一 ReentrantLock 小例子 二 ReentrantLock的优点 1 可重入 其实synchronized 也是可重入的 2 可中断 3 可限时 3 公平锁 一 ReentrantLock 小例子 import jav
  • 1 - 选择排序与冒泡排序

    排序算法 选择排序 选择排序的思路 依次遍历数组 每次遍历数组的时候 记录当前未排序的最小值的索引 让最小值的索引和待排序的数组的第一个元素进行交换 然后继续重复操作 直到所有元素都排序 public class SelectionSort