書籍自然數數組的排序(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
英文地址,請注明出處:http://en.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;同時進行失物招領、查看訂單信息等多項操作。對于管…