数组案例练习进阶版---对数组中的元素进行排序(选择法)

news2024/9/27 12:07:17

上期文章当中,我们一起了解了怎样查找数组中的元素,今天,再让我们来看一看怎样对数组中的元素进行排序吧。

再java中,关于数据的排序手段,多种多样,例如:选择法排序、冒泡法排序、快速排序等等

那么基于我们之前做过有关于获取数组中的最大值的练习,今天我们就来讲一讲,和这个相关的选择法吧:

首先它的原理是这样的:

有这样一个长度为5的数组,里面的5 个元素分别为:28,43,16,35,27

很显然,这五个数组有大有小,也没有顺序

那么怎样对其进行排序呢?

我们就先把其中的最大值选择出来,很显然,是43,然后我们把它和最后一个位置的元素进行交换,这样,最后一个位置就一定是最大值了,即:

然后红色区域的数字我们就先不去管它了,继续再蓝色区域中开启第二轮循环,选择新的最大值,这样第二大的数字就又被放到蓝色区域的最后了 ,我们把这个数字也加入红色区域,再在蓝色区域内进行新的循环...依次类推,终有一刻,数组会变成这个样子:

此时,长度为5的数组当中,经历了四次选择最大值并换位的步骤后,四个最大值已经被找到并被依次放入了最后的位置。

我们发现,当数组变为这样时,数组顺序就已经被排好了,因此我们也就不再需要第五次的选择以及换位了,因此,我们在循环这个过程时,只需要寻找数组的长度-1次就好了。

明白了原理后,我们来看代码:

public class Sort {
    public static void main(String[] args) {
        int[] nums = new int[]{28,43,16,35,27};//使用静态初始化的方式为数组赋初值
        //定义两个变量,一个用来储存最大位置的下标,一个作为临时变量实现元素的交换
        int maxIndex,temp;
        for(int i=0;i<nums.length-1;i++){//有5个元素,所以进行四轮比较,i为0,1,2,3,正好四次
            maxIndex=0;//假定第一个元素是最大的
            //从第二个元素开始依次和当前的最大值比较,
            //每一大轮的选择并换位后,代表轮数的i的值会增加1。
            //我们正好在这里-i,寓意着把每轮换位后扩大的红色区域减掉
            for (int j=1;j< nums.length-i;j++){            
                if(nums[j]>nums[maxIndex]){//谁比当前的最大值还大
                    maxIndex=j;//谁就是新的最大值
                }
            }
            //代码运行至此,最新的最大值一定是当前需要比较的数字中,最大的了
            //下面三行代码是对最大值和最后一个位置进行一个交换
            //由于直接赋值会覆盖,我们需要一个临时变量temp
            //先把最后一个位置的元素给temp,nums.length代表数组长度,-1代表最后一个元素
            //-i代表减掉红色区域
            temp=nums[nums.length-1-i];
            //再把最大值放进最后一个位置
            nums[nums.length-1-i]=nums[maxIndex];
            //再把temp里临时存着的最后位置的原本的元素放进最大值那个位置
            nums[maxIndex]=temp;
        }
        for (int i=0;i< nums.length;i++){
            System.out.println(nums[i]);//输出每个元素
        }
    }
}

那么今天的内容就到这里啦,如果存在哪些疑问或问题欢迎大家指出,我们下期再见~

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

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

相关文章

Centos7.9操作系统kdump crash文件vmcore未生成问题

Centos7.9操作系统kdump crash文件未生成问题 一、背景说明1、问题背景 二、排查思路1、先了解下crashkernelcrashkernel设置方式示例如何配置crashkernel验证crashkernel配置 2、再了解下kdump2.1 Kdump 的基本概念2.1.1. 生产内核&#xff08;Production Kernel&#xff09;2…

WPF使用Direct2D绘制曲线

wpf使用Direct2D绘制曲线 Install-Package SharpDX Install-Package SharpDX.Direct2D1 Install-Package SharpDX.DXGI Install-Package SharpDX.Direct3D11 <Window x:Class="WpfApp2.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xam…

告别繁复,三款PDF转图片工具让一切变得简单

作为一名刚刚踏入职场的新手&#xff0c;各种电子文档真的是让我手忙脚乱&#xff0c;尤其是PDF文件&#xff0c;它以其格式稳定、兼容性好而被广泛使用。然而&#xff0c;有时候我们需要将PDF文件中的内容转换成图片格式&#xff0c;以便在不同的场合下使用。今天就和大家分享…

如何用IP地址去申请SSL证书?

在当今社会&#xff0c;网络安全越来越重要&#xff0c;网站部署SSL证书是保障网络安全的重要方面。在大多数情况下都是用域名来申请SSL证书&#xff0c;但是有时候没有域名&#xff0c;或者域名不能用来申请SSL证书时&#xff0c;就需要用IP地址来申请SSL证书。下面是具体申请…

Stable Diffusion绘画 | 图生图-局部重绘(一)

使用 文生图 生成如下图片&#xff0c; 正向提示词&#xff1a; (best quality, masterpiece:1.2),1girl,wearing school uniform,in the school playground, 反向提示词&#xff1a; NSFW,(EasyNegativeV2:1.2),worst quality,low quality,monochrome, 点击&#x1f3a8;按…

ThinkPHP6与金仓数据库(Kingbase)集成:模型查询的解决方案

摘要&#xff1a; ThinkPHP6是一款流行的PHP框架&#xff0c;支持多种数据库。然而&#xff0c;对于金仓数据库&#xff08;Kingbase&#xff09;这种相对小众的数据库系统&#xff0c;开发者在使用ThinkPHP6进行模型查询时可能会遇到一些兼容性问题。本文将提供一种解决方案&a…

08.JAVA线程基础

1.线程介绍 单线程&#xff1a;同一个时刻&#xff0c;只允许执行一个线程 多线程&#xff1a;同一个时刻&#xff0c;允许执行多个线程 并发&#xff1a;同一时刻&#xff0c;多个任务交替执行。 并行&#xff1a;同一时刻&#xff0c;多个任务同时执行。 2.线程使用 方式一&…

对称二叉树 - 力扣(LeetCode)C语言

101. 对称二叉树 - 力扣&#xff08;LeetCode&#xff09;(点击前面链接即可查看题目) 一、题目 给你一个二叉树的根节点 root &#xff0c; 检查它是否轴对称。 示例 1&#xff1a; 输入&#xff1a;root [1,2,2,3,4,4,3] 输出&#xff1a;true示例 2&#xff1a; 输入&…

【有手就行】:从无到有搭建前端VUE项目

前言 由于好久没正儿八经写过前端代码了&#xff0c;导致现在想自己创建个VUE项目搞点东西却连步骤都忘了。反正闲着也是闲着&#xff0c;就简单归纳下&#xff0c;就当整理下笔记吧。 直接开始吧 本次教程主要以VUE 2.x版本为介绍 第一步 环境准备 1.安装Node 从 Node官网…

战绩绿油油!全红婵巴黎奥运再度爆火,一个家庭兴旺的底层逻辑——早读(逆天打工人爬取热门微信文章解读)

上期点赞挺多呀&#xff0c;看来周六不上班的人真不少&#xff0c;羡慕呀&#xff01; 引言Python 代码第一篇 洞见 全红婵巴黎奥运再度爆火&#xff0c;我顿悟一个家庭兴旺的底层逻辑第二篇 股市 绿油油战纪结尾 引言 今天很晚 没办法 今天上班都差点迟到 有两点 一是早上开始…

CodeSys中处理(拼接)超长字符串

文章目录 1.需求2.目前的限制3.解决方案4.注意事项4.1.更改字符串的长度后还是被限制在32767或者32768 1.需求 目前有个需求&#xff1a;在CodeSys中&#xff0c;需要将上万甚至十几万条数据&#xff08;字符串&#xff09;汇总到一个字符串上。 2.目前的限制 我们知道默认使…

8–9月,​Sui Move智能合约工作坊将在台北举行

你对区块链和去中心化应用感兴趣吗&#xff1f;想深入学习Sui Move编程语言吗&#xff1f; 从8月10日到9月28日&#xff0c;Sui Mover社区将在每周六下午13:00–17:00举办精彩的工作坊&#xff0c;为期两个月&#xff0c;带你从零基础入门到高级进阶&#xff0c;全面掌握Sui M…

Gateway网关设置请求头乱码

问题描述&#xff1a; ​ 在做gateway用户认证过程中&#xff0c;我们将前端传过来的token字符串进行解析以后&#xff0c;将用户信息存入请求头往下传递的过程中&#xff0c;如果用户信息中存在中文&#xff0c;下游服务从请求头中获取到用户信息时会出现乱码 ​ 总体来说&a…

担心异构数据库迁移踩“坑”?听听大咖们怎么说

在技术升级和国产化战略的双重推动下&#xff0c;如何将来自Oracle、MySQL等异构数据库的数据无缝迁移至国产数据库&#xff0c;已成为企业持续发展的关键一环。 YashanDB Meetup第13期特别邀请首届迁移体验官用户代表、TechTalk社区创始人尚雷&#xff0c;YashanDB 售后服务负…

【python】Scrapy中常见的“Response Not Ready”或“Response Not 200”错误分析及解决

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…

家用洗地机有什么推荐的吗?洗地机口碑榜前四名推荐

随着日常清洁需求的提升&#xff0c;如今洗地机已成为现代家居清洁的好帮手&#xff0c;承担着家庭卫生的重要角色&#xff0c;而一台高效、便捷的洗地机更是成为了众多家庭清洁卫生必备工具。 不过市场上的洗地机品牌众多&#xff0c;每个品牌下又有诸多系列&#xff0c;让人…

动态规划之——背包DP(入门篇)

文章目录 概要说明01背包模板例题题意概要思路code1code2 01背包的应用题题目来源思路code 完全背包模板例题题意概要思路code 概要说明 本文只讲了01背包和完全背包&#xff0c;至于其他背包问题后续补充 01背包 模板例题 点击这里 题意概要 思路 01背包的模板题 首先对…

SAM 图像分割算法计算物体表面积

参考: https://enpeicv.com/forum.php?mod=viewthread&tid=90&extra=page%3D1 使用SAM算法进行图像分割,计算出分割图像有多少像素,然后根据像素数量计算实际面积 SAM安装及模型下载: https://github.com/facebookresearch/segment-anything?tab=readme-ov-file…

Gemini Pro 加持,谷歌 AI 笔记 Notebook LM 重磅升级!

在现在这种信息爆炸的时代&#xff0c;如何高效处理海量信息&#xff0c;已经成为困扰很多人的难题。如何整合来自不同来源的信息和想法&#xff0c;并在它们之间建立联系。这个过程&#xff0c;费时费力&#xff0c;还很容易让人抓狂&#xff0c;更别提还要从中提炼、归纳、整…

工作助手C#研究笔记(5)

通过示例对C#程序的结构逻辑进行研究梳理&#xff0c;虽然通过阅读相关书籍&#xff0c;但是来的效果更慢。一下相关内容可能有误&#xff0c;请谨慎听取。 TaskToDoList-master 1.XAML “XAML”是WPF中专门用于设计UI的语言&#xff0c;优点是 1.XAML可以设计出专业的UI和…