八大排序——簡單選擇排序

目錄

1.1基本操作:

1.2動態圖:

1.3代碼:

代碼解釋

1.?main?方法

2.?selectSort?方法

示例運行過程

初始數組

每輪排序后的數組

最終排序結果

代碼總結


1.1基本操作:

選擇排序(select sorting)也是一種簡單的排序方法。

它的基本思想是:第一次從arr[0到]arr[n-1]中選取最小值,與arr[0]交換,第二次從arr[1]到arr[n-1]中選取最小值,與arr[1]交換,第三次從arr[2]到arr[n-1]中選取最小值,與arr[2]交換,…,第i次從arr[i-1]arr[n-1]中選取最小值,與arr[i-1]交換,…, 第n-1次從arr[n-2]~arr[n-1]中選取最小值,與arr[n-2]交換,總共通過n-1次,得到一個按排序碼從小到大排列的有序序列。

1.2動態圖:

1.3代碼:

public class Insert {public static void main(String[] args) {int[] arr = {8,65,41,28,6,1,4,5,32,9,10};System.out.println("排序前");System.out.println(Arrays.toString(arr));selectSort(arr);}public static void selectSort(int[] arr) {for (int i = 0; i < arr.length - 1; i++) {//尋找最小值,將當前的作為最小值來看待int minIndex = i;int min = arr[i];for (int j = i + 1; j < arr.length; j++) {// 當前值的下一個值和當前值判斷大小,如果先一個值小,那么就進行交換 ,// 當然要記錄一下當前值的 下標 ,目的是為了當前值和第一個值進行交換if (min > arr[j]) {min = arr[j];minIndex = j;}}//進行交換arr[minIndex] = arr[i];arr[i] = min;System.out.println("第" + (i + 1) + "輪后");System.out.println(Arrays.toString(arr));}}
}

代碼解釋

1.?main?方法

public static void main(String[] args) {
? ? int[] arr = {8, 65, 41, 28, 6, 1, 4, 5, 32, 9, 10};
? ? System.out.println("排序前");
? ? System.out.println(Arrays.toString(arr));
? ? selectSort(arr);
}

  • 功能:程序的入口。

  • 邏輯

    • 定義了一個未排序的整數數組?arr

    • 打印排序前的數組。

    • 調用?selectSort?方法對數組進行排序。

2.?selectSort?方法

public static void selectSort(int[] arr) {
? ? for (int i = 0; i < arr.length - 1; i++) {
? ? ? ? // 尋找最小值,將當前的作為最小值來看待
? ? ? ? int minIndex = i;
? ? ? ? int min = arr[i];
? ? ? ? for (int j = i + 1; j < arr.length; j++) {
? ? ? ? ? ? // 當前值的下一個值和當前值判斷大小,如果下一個值小,那么就更新最小值和最小值的下標
? ? ? ? ? ? if (min > arr[j]) {
? ? ? ? ? ? ? ? min = arr[j];
? ? ? ? ? ? ? ? minIndex = j;
? ? ? ? ? ? }
? ? ? ? }
? ? ? ? // 進行交換
? ? ? ? arr[minIndex] = arr[i];
? ? ? ? arr[i] = min;
? ? ? ? System.out.println("第" + (i + 1) + "輪后");
? ? ? ? System.out.println(Arrays.toString(arr));
? ? }
}

  • 功能:實現選擇排序算法。

  • 邏輯

    1. 外層循環

      • 遍歷數組,從第一個元素到倒數第二個元素(i?從?0?到?arr.length - 2)。

      • 每次循環的目的是找到未排序部分的最小值,并將其放到已排序部分的末尾。

    2. 初始化最小值和最小值的下標

      • minIndex?記錄當前最小值的下標,初始值為?i

      • min?記錄當前最小值,初始值為?arr[i]

    3. 內層循環

      • 從?i + 1?開始遍歷未排序部分。

      • 如果找到比?min?更小的值,則更新?min?和?minIndex

    4. 交換最小值

      • 將找到的最小值與當前外層循環的位置?i?的值進行交換。

    5. 打印每輪排序后的數組

      • 每輪排序后,打印當前數組的狀態。


示例運行過程

初始數組

[8, 65, 41, 28, 6, 1, 4, 5, 32, 9, 10]

每輪排序后的數組

  1. 第1輪

    • 找到最小值?1,與第一個元素?8?交換。

    • 結果:[1, 65, 41, 28, 6, 8, 4, 5, 32, 9, 10]

  2. 第2輪

    • 找到最小值?4,與第二個元素?65?交換。

    • 結果:[1, 4, 41, 28, 6, 8, 65, 5, 32, 9, 10]

  3. 第3輪

    • 找到最小值?5,與第三個元素?41?交換。

    • 結果:[1, 4, 5, 28, 6, 8, 65, 41, 32, 9, 10]

  4. 第4輪

    • 找到最小值?6,與第四個元素?28?交換。

    • 結果:[1, 4, 5, 6, 28, 8, 65, 41, 32, 9, 10]

  5. 第5輪

    • 找到最小值?8,與第五個元素?28?交換。

    • 結果:[1, 4, 5, 6, 8, 28, 65, 41, 32, 9, 10]

  6. 第6輪

    • 找到最小值?9,與第六個元素?28?交換。

    • 結果:[1, 4, 5, 6, 8, 9, 65, 41, 32, 28, 10]

  7. 第7輪

    • 找到最小值?10,與第七個元素?65?交換。

    • 結果:[1, 4, 5, 6, 8, 9, 10, 41, 32, 28, 65]

  8. 第8輪

    • 找到最小值?28,與第八個元素?41?交換。

    • 結果:[1, 4, 5, 6, 8, 9, 10, 28, 32, 41, 65]

  9. 第9輪

    • 找到最小值?32,與第九個元素?32?交換(無需交換)。

    • 結果:[1, 4, 5, 6, 8, 9, 10, 28, 32, 41, 65]

  10. 第10輪

    • 找到最小值?41,與第十個元素?41?交換(無需交換)。

    • 結果:[1, 4, 5, 6, 8, 9, 10, 28, 32, 41, 65]


最終排序結果

[1, 4, 5, 6, 8, 9, 10, 28, 32, 41, 65]

代碼總結

  • 算法:選擇排序。

  • 時間復雜度:O(n2),其中?n?是數組的長度。

  • 空間復雜度:O(1),原地排序,不需要額外的空間。

  • 優點:實現簡單,適合小規模數據。

  • 缺點:時間復雜度較高,不適合大規模數據。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/70092.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/70092.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/70092.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

與傳統光伏相比 城電科技的光伏太陽花有什么優勢?

相比于傳統光伏&#xff0c;城電科技的光伏太陽花有以下優勢&#xff1a; 一、發電效率方面 智能追蹤技術&#xff1a;光伏太陽花通過內置的智能追蹤系統&#xff0c;采用全球定位跟蹤算法&#xff0c;能夠實時調整花瓣&#xff08;即光伏板&#xff09;的角度&#xff0c;確…

FPGA的星辰大海

編者按 時下風頭正盛的DeepSeek,正值喜好宏大敘事的米國大統領二次上崗就業,OpenAI、軟銀、甲骨文等宣布投資高達5000億美元“星際之門”之際,對比尤為強烈。 某種程度上,,是低成本創新理念的直接落地。 包括來自開源社區的諸多贊譽是,并非體現技術有多“超越”,而是…

Elasticsearch:15 年來致力于索引一切,找到重要內容

作者&#xff1a;來自 Elastic Shay Banon 及 Philipp Krenn Elasticsearch 剛剛 15 歲了&#xff01;回顧過去 15 年的索引和搜索&#xff0c;并展望未來 15 年的相關內容。 Elasticsearch 剛剛成立 15 周年。一切始于 2010 年 2 月的一篇公告博客文章&#xff08;帶有標志性的…

嵌入式軟件、系統、RTOS(高軟23)

系列文章目錄 4.2嵌入式軟件、系統、RTOS 文章目錄 系列文章目錄前言一、嵌入式軟件二、嵌入式系統三、嵌入式系統分類四、真題總結 前言 本節講明嵌入式相關知識&#xff0c;包括軟件、系統。 一、嵌入式軟件 二、嵌入式系統 三、嵌入式系統分類 四、真題 總結 就是高軟筆記…

數據結構 day02

3. 線性表 3.1. 順序表 3.1.3. 順序表編程實現 操作&#xff1a;增刪改查 .h 文件 #ifndef __SEQLIST_H__ #define __SEQLIST_H__ #define N 10 typedef struct seqlist {int data[N];int last; //代表數組中最后一個有效元素的下標 } seqlist_t;//1.創建一個空的順序表 seq…

數據恢復-01-機械硬盤的物理與邏輯結構

磁盤存儲原理 磁盤存儲數據的原理&#xff1a; 磁盤存儲數據的原理是利用磁性材料在磁場作用下的磁化性質&#xff0c;通過在磁盤表面上劃分成許多小區域&#xff0c;根據不同的磁化方向來表示0和1的二進制數據&#xff0c;通過讀寫磁頭在磁盤上的移動&#xff0c;可以實現數據…

wordpress get_footer();與wp_footer();的區別的關系

在WordPress中&#xff0c;get_footer() 和 wp_footer() 是兩個不同的函數&#xff0c;它們在主題開發中扮演著不同的角色&#xff0c;但都與頁面的“頁腳”部分有關。以下是它們的區別和關系&#xff1a; 1. get_footer() get_footer() 是一個用于加載頁腳模板的函數。它的主…

DeepSeek 通過 API 對接第三方客戶端 告別“服務器繁忙”

本文首發于只抄博客&#xff0c;歡迎點擊原文鏈接了解更多內容。 前言 上一期分享了如何在本地部署 DeepSeek R1 模型&#xff0c;但通過命令行運行的本地模型&#xff0c;問答的交互也要使用命令行&#xff0c;體驗并不是很好。這期分享幾個第三方客戶端&#xff0c;涵蓋了桌…

跟著李沐老師學習深度學習(十一)

經典的卷積神經網絡 在本次筆記中主要介紹一些經典的卷積神經網絡模型&#xff0c;主要包含以下&#xff1a; LeNet&#xff1a;最早發布的卷積神經網絡之一&#xff0c;目的是識別圖像中的手寫數字&#xff1b;AlexNet&#xff1a; 是第一個在大規模視覺競賽中擊敗傳統計算機…

使用JavaScript實現深淺拷貝

1. 拷貝的基本概念和必要性 在 JavaScript 中&#xff0c;數據類型分為基本數據類型&#xff08;如 Number、String、Boolean、Null、Undefined、Symbol&#xff09;和引用數據類型&#xff08;如 Object、Array&#xff09;。基本數據類型存儲的是值本身&#xff0c;而引用數…

解析瀏覽器中JavaScript與Native交互原理:以WebGPU為例

引言 隨著Web應用復雜度的提升&#xff0c;開發者對瀏覽器訪問本地硬件能力的需求日益增長。然而&#xff0c;瀏覽器必須在開放性與安全性之間找到平衡——既不能放任JavaScript&#xff08;JS&#xff09;隨意操作系統資源&#xff0c;又要為高性能計算、圖形渲染等場景提供支…

T-Sql 打印所有用戶表的建表腳本

-- 聲明一個變量用于存儲表名 DECLARE TableName NVARCHAR(128); -- 聲明一個游標&#xff0c;用于遍歷所有用戶表 DECLARE TableCursor CURSOR FOR SELECT name FROM sys.tables WHERE type U; -- 打開游標 OPEN TableCursor; -- 從游標中獲取第一行數據 FETCH NEXT FROM Ta…

25/2/16 <算法筆記> MiDas原理

MiDaS&#xff08;Monocular Depth Sensing&#xff09;是一種基于單目深度估計的技術&#xff0c;它通過深度學習方法使用單張RGB圖像&#xff08;普通2D圖像&#xff09;來估算場景的深度圖&#xff08;Depth Map&#xff09;。相比于傳統的依賴專用深度傳感器&#xff08;如…

python+halcon 解讀labelme標注生成marksimage

這一段代碼封裝了一個類&#xff0c;需要傳統一個圖片和標注后json文件所在的地址&#xff0c;標注的選項是polygon&#xff0c;主要是用于unet深度學習網絡 在初始化時需要輸入文件&#xff08;imagejeson&#xff09;路徑&#xff0c;多分類任務的label_list。會在項目目錄下…

從技術債務到架構升級,滴滴國際化外賣的變革

背 景 商家營銷簡述 在外賣平臺的運營中&#xff0c;我們致力于通過靈活的補貼策略激勵商家&#xff0c;與商家共同打造良好的合作關系&#xff0c;也會提供多樣化的營銷活動&#xff0c;幫助商家吸引更多用戶下單。通過這些活動&#xff0c;不僅能夠提高商家的銷量&#xff0c…

英語—四級CET4考試—技巧篇—選詞填空—實操教學—2014 年 6 月大學英語四級考試真題(第 2 套)

&#x1f3e0;個人主頁&#xff1a;fo安方的博客? &#x1f482;個人簡歷&#xff1a;大家好&#xff0c;我是fo安方&#xff0c;目前中南大學MBA在讀&#xff0c;也考取過HCIE Cloud Computing、CCIE Security、PMP、CISP、RHCE、CCNP RS、PEST 3等證書。&#x1f433; &…

線性代數中的正交和標準正交向量

在線性代數中&#xff0c;理解正交向量和正交向量至關重要&#xff0c;尤其是對于機器學習中的應用。這篇博文將簡化這些概念&#xff0c;而不會太深入地深入研究復雜的數學。 正交向量 如果兩個向量的點積等于零&#xff0c;則認為這兩個向量是正交的。但點積到底是什么呢&am…

企業文件共享中的權限管理與安全風險防范

在企業的日常運營中&#xff0c;文件共享是必不可少的一項工作。然而&#xff0c;文件共享過程中如果權限管理不當&#xff0c;極易引發安全風險&#xff0c;導致企業敏感信息泄露。因此&#xff0c;加強文件共享中的權限管理與安全風險防范&#xff0c;對于保障企業信息安全至…

急停信號的含義

前言&#xff1a; 大家好&#xff0c;我是上位機馬工&#xff0c;碩士畢業4年年入40萬&#xff0c;目前在一家自動化公司擔任軟件經理&#xff0c;從事C#上位機軟件開發8年以上&#xff01;我們在開發C#的運動控制程序的時候&#xff0c;一個必要的步驟就是確認設備按鈕的急停…

數據結構:圖;鄰接矩陣和鄰接表

鄰接矩陣&#xff1a; 1.概念&#xff1a; 鄰接矩陣是圖的存儲結構之一&#xff0c;通過二維數組表示頂點間的連接關系。 2.具體例子 &#xff1a; 一.無向圖鄰接矩陣示例&#xff1a; 示例圖&#xff08;頂點&#xff1a;A、B、C&#xff0c;邊&#xff1a;A-B、B-C&…