书籍自然数数组的排序(8)0715

题目

给定一个长度为N的整型数组arr,其中有N个互不相等的自然数1~N,请实现arr的排序,但是不要把下标0~N-1位置上的数通过直接赋值的方式替换成1~N。

解答
arr在调整之后应该事下标从0到N-1的位置上依次放着1~N,即arr[index] = index + 1。

1、从左到右遍历arr,假设当前遍历到i位置。

2、如果arr[i] ==i+1,说明当前的位置不需要调整,继续遍历下一个位置。

3、如果arr[i] != i+1,说明此时i位置的数arr[i]不应该放在i位置上,接下来将进行跳的过程。

举例说明,比如[1,2,5,3,4],假设遍历到位置2,也就是5这个数。5应该放在位置4上,所以把5放过去,数组变成[1,2,5,3,5]。同时,4这个数是被5替下来的数,应该放在位置3,所以把4放过去,数组变成[1,2,5,4,5]。同时3这个数是被4替下来的数,应该放在位置2,所以把3放过去,数组变成[1,2,3,4,5]。当跳了一圈回到原来位置后,会发现此时arr[i]==i+1,继续遍历下一个位置。

public void sort1(int[] arr){int tmp = 0;int next = 0;for(int i = 0; i!= arr.length;i++){tmp = arr[i];while(arr[i] != i + 1){next = arr[tmp - 1];arr[tmp - 1 ] = tmp;tmp = next;}}
}

1、从左到右遍历arr,假设当前遍历到i位置。

2、如果arr[i] == i + 1,说明当前的位置不需要调整,继续遍历下一个位置。

3、如果arr[i] != i + 1,说明此时i位置的数arr[i]不应该放在i位置上,接下来将在i位置进行交换过程。

比如[1,2,5,3,4],假设遍历到位置2,也就是5这个数。5应该放在位置4上,所以位置4上的数4和5交换,数组变成[1,2,4,3,5]。但此时还是arr[2]!=3,4这个数应该放在位置3上,所以3和4交换,数组变成[1,2,3,4,5]。此时arr[2] == 3,遍历下一个位置。

public void sort2(int[] arr){int tmp = 0;for(int i = 0;i<arr.length;i++){while(arr[i] != i + 1){tmp = arr[i];arr[i] = arr[arr[i] - 1];arr[arr[i] - 1] = tmp;}}
}public void sort3(int[] arr){int tmp = 0;for(int i = 0;i<arr.length;i++){while(arr[i] != i + 1){tmp = arr[arr[i] - 1];arr[arr[i] - 1]= arr[i];arr[i] = tmp;}}
}

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

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

相关文章

【08】MFC入门到精通——MFC模态对话框 和 非模态对话框 解析 及 实例演示

文章目录八、模态对话框 和 非模态对话框 创建及显示8.1 对话框是怎样弹出的8.2 模态对话框的创建及显示8.3 非模态对话框的创建及显示8.4 完整代码下载八、模态对话框 和 非模态对话框 创建及显示 Windows对话框分为两类&#xff1a;模态对话框 和 非模态对话框。 模态对话框…

github上传大文件(多种解决方案)

之前一直用vscode的上传项目方法&#xff0c;这个方便之处在于不用打开git终端输入各种命令&#xff0c;不过麻烦的是我一直无法拉取github上的远程仓库提交&#xff0c;每次只能更新已有的仓库并且上传的文件还不能太大&#xff0c;应该是不能超过100MB&#xff0c;而且直接在…

生活污水深度除磷的方法

生活污水中磷含量过多的危害大家都知道总磷是水质检测的重要指标之一&#xff0c;在污水处理中生活污水往往都会出现总磷超标的现象。生活污水磷超标的危害是多方面的主要包括水体富营养化、危害水生生物、影响人类健康&#xff0c;以及可能引发蓝藻水华等问题。除磷方法污水的…

Flutter瀑布流布局深度实践:打造高性能动态图片墙

本文将深入探讨如何在Flutter中实现高性能瀑布流布局&#xff0c;解决动态高度内容展示的核心难题&#xff0c;并带来卓越的用户体验。引言&#xff1a;瀑布流布局的魅力 瀑布流布局(Pinterest-style layout)已成为现代应用展示图片和内容的黄金标准。它通过错落有致的排列方式…

OpenCV 伽马校正函数gammaCorrection()

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 该函数用于对输入图像应用伽马校正&#xff08;Gamma Correction&#xff09;&#xff0c;这是一种非线性的图像处理技术&#xff0c;主要用于调整…

Linux-局域网构建+VLAN 划分 + 端口 MAC-IP 绑定 + 静态 DHCP

文章目录1. 适用于家庭、工作室或小型企业的局域网构建2. VLAN划分3. VLAN 划分 端口 MAC-IP 绑定 静态 DHCP跳转→网络管理基础复习 1. 适用于家庭、工作室或小型企业的局域网构建 ✅ 一、硬件连线&#xff08;一次到位&#xff09; 光纤入户 → 光猫/宽带调制解调器光猫…

渗透测试路线

渗透测试学习路线报告&#xff08;从入门到高级&#xff09; 引言&#xff1a;渗透测试概述与学习路线设计 渗透测试作为网络安全体系中的核心实践环节&#xff0c;通过模拟真实攻击者的技术手段与攻击路径&#xff0c;主动识别信息系统中的安全漏洞、评估防护机制有效性&#…

Node.js 中http 和 http/2 是两个不同模块对比

1. 核心模块对比 特性http 模块 (HTTP/1.1)http2 模块 (HTTP/2)协议版本HTTP/1.1&#xff08;文本协议&#xff09;HTTP/2&#xff08;二进制协议&#xff09;多路复用不支持&#xff08;需多个 TCP 连接&#xff09;支持&#xff08;单连接多流&#xff09;头部压缩无HPACK 压…

3DGS之COLMAP

COLMAP 在 3DGS 中起到了数据预处理和三维重建的关键作用&#xff0c;其处理流程包括特征提取与匹配、稀疏重建、稠密重建和输出文件生成。结合 3DGS 的高斯分布建模和优化算法&#xff0c;COLMAP 提供了场景的几何和相机信息&#xff0c;为实时渲染和三维重建奠定了基础。一、…

RabbitMQ中队列长度限制(Queue Length Limit)详解

在 RabbitMQ 中&#xff0c;队列长度限制&#xff08;Queue Length Limit&#xff09;是指对队列中消息数量的最大限制。当队列中的消息数量达到设定的上限时&#xff0c;RabbitMQ 会根据配置的策略&#xff08;如丢弃旧消息、拒绝新消息或将消息转移到另一个队列&#xff09;来…

Python设计模式深度解析:建造者模式(Builder Pattern)完全指南

Python设计模式深度解析&#xff1a;建造者模式&#xff08;Builder Pattern&#xff09;完全指南前言什么是建造者模式&#xff1f;建造者模式的核心思想模式的核心组成实际案例一&#xff1a;UI选择组件的动态构建抽象建造者基类具体建造者实现列表框建造者复选框建造者工厂建…

elementuiPlus+vue3手脚架后台管理系统,上生产环境之后,如何隐藏vite.config.ts的target地址

在项目根目录创建 .env.production 文件&#xff1a; VITE_API_TARGEThttps://your-real-api.com修改 vite.config.ts&#xff1a; import { defineConfig, loadEnv } from viteexport default defineConfig(({ mode }) > {const env loadEnv(mode, process.cwd(), )return…

ARCGIS PRO DSK 颜色选择控件(ColorPickerControl)的调用

颜色选择控件ColorPickerControl 。一、XAML 集成方式 1 、在WPF窗体上使用&#xff0c;xml&#xff1a;加入空间命名引用xmlns:ui1"clr-namespace:ArcGIS.Desktop.Internal.Mapping.Symbology;assemblyArcGIS.Desktop.Mapping" xmlns:uil"http://schemas.xceed…

深浅拷贝以及函数缓存

目录 数据类型介绍 基本数据类型&#xff08;Primitive Types&#xff09; 引用数据类型&#xff08;Reference Types&#xff09; 浅拷贝 深拷贝 利用JSON的序列化和反序列化实现深拷贝 递归实现深拷贝 第三方库lodash的cloneDeep 函数缓存的概念 实现方法 数据类型介…

第六届信号处理与计算机科学国际学术会议(SPCS 2025)

重要信息 官网&#xff1a;www.icspcs.org &#xff08;详情见官网&#xff09; 时间&#xff1a;2025年8月15-17日 地点&#xff1a;西安 主题 信号处理与智能计算计算科学与人工智能网络与多媒体技术数字信号处理 雷达信号处理 通信信号处理 临时和传感器网络 模拟和…

MongoDB:一个灵活的、可扩展的 NoSQL 数据库

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》、《前端求职突破计划》 &#x1f35a; 蓝桥云课签约作者、…

系统思考场景应用

最近一直在与不同行业头部企业共同探讨系统思考这个主题。一些新的合作伙伴也常常问我&#xff0c;系统思考究竟能为客户解决什么痛点&#xff1f; 这两天上课客户的核心需求是&#xff1a;全局思维。在过去的几年里&#xff0c;我深切体会到&#xff0c;随着外部环境的快速变化…

SQL预编译:安全高效数据库操作的关键

通过占位符&#xff08;如 ? 或命名参数&#xff09;编写预编译的 SQL 语句&#xff08;通常通过 PreparedStatement 实现&#xff09;是数据库操作的最佳实践&#xff0c;主要好处包括&#xff1a;&#x1f512; 1. 防止 SQL 注入攻击&#xff08;核心安全优势&#xff09; 问…

springboot实验室管理系统-计算机毕业设计源码20916

摘 要 随着高校实验室管理需求的不断增加&#xff0c;传统的管理方式已经难以满足现代教育的要求。为了解决这一问题&#xff0c;本文设计并实现了一种基于VUE和SpringBoot的实验室管理系统。该系统采用前后端分离的架构&#xff0c;前端使用VUE框架&#xff0c;后端基于Sprin…

spdringboot共享学习室小程序 计算机毕业设计源码27728

摘 要 共享学习室小程序是一款基于SpringBoot框架开发的移动端应用&#xff0c;旨在提供一个便捷的自习室预约、管理和资源共享平台。通过该小程序&#xff0c;用户可以方便地预约自习室、查看资讯、提交反馈意见&#xff0c;同时进行失物招领、查看订单信息等多项操作。对于管…