簡單選擇排序算法

簡單選擇排序思想:首先,找到數組中最小的元素,其次,將它和數組第一個元素交換位置;再次,在剩下的元素中找到最小的元素,將它與數組中的第二個元素交換。如此亡故,直到將整個數組排序。

這種方法叫做選擇排序,因為它在不斷地選擇剩余元素之中的最小者。

先說看每步的狀態變化,后邊介紹細節,現有無序數組[6 2 4 1 5 9]

第一趟找到最小數1,放到最前邊(與首位數字交換)

交換前:| 6 | 2 | 4 | 1 | 5 | 9 |

交換后:| 1 | 2 | 4 | 6 | 5 | 9 |

第二趟找到余下數字[2 4 6 5 9]里的最小數2,與當前數組的首位數字進行交換,實際沒有交換,本來就在首位

交換前:| 1 | 2 | 4 | 6 | 5 | 9 |

交換后:| 1 | 2 | 4 | 6 | 5 | 9 |

第三趟繼續找到剩余[4 6 5 9]數字里的最小數4,實際沒有交換,4待首位置無須交換

第四趟從剩余的[6 5 9]里找到最小數5,與首位數字6交換位置

交換前:| 1 | 2 | 4 | 6 | 5 | 9 |

交換后:| 1 | 2 | 4 | 5 | 6 | 9 |

第五趟從剩余的[6 9]里找到最小數6,發現它待在正確的位置,沒有交換

排序完畢輸出正確結果[1 2 4 5 6 9]

第一趟找到最小數1的細節

當前數組是| 6 | 2 | 4 | 1 | 5 | 9 |


先把6取出來,讓它扮演最小數

當前最小數6與其它數一一進行比較,發現更小數就交換角色

當前最小數6與2比較,發現更小數,交換角色,此時最小數是2,接下來2與剩余數字比較

當前最小數2與4比較,不動

當前最小數2與1比較,發現更小數,交換角色,此時最小數是1,接下來1與剩余數字比較

當前最小數1與5比較,不動

當前最小數1與9比較,不動,到達末尾

當前最小數1與當前首位數字進行位置交換,如下所示

交換前:| 6 | 2 | 4 | 1 | 5 | 9 |

交換后:| 1 | 2 | 4 | 6 | 5 | 9 |

完成一趟排序,其余步驟類似


選擇排序有兩個明顯的特點:

1.運行時間跟輸入無關。

為了找出最小元素而掃描一遍數組并不能為下一次掃描提供任何信息。

2.數據移動是最少的。

每次交換都會改變兩個數組元素的值。


代碼實現(僅供參考):

public class SelectionSort {public int[] selectSort(int[] A, int n) {for (int i = 0; i < n; i++) {int minIndex = i;//最小元素的索引int min = A[i];//最小元素for (int j = i; j < n; j++) {if (A[j] < min) {min = A[j];minIndex = j;}}if (minIndex != i) {int temp = A[i];A[i] = A[minIndex];A[minIndex] = temp;}}return A;}public static void main(String args[]) {int A[] = { 2, 1, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17,18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29 };int n = A.length;SelectionSort selectionSort = new SelectionSort();double start = System.currentTimeMillis();int B[] = selectionSort.selectSort(A, n);for (int i = 0; i < n; i++)System.out.print(B[i] + ",");double end = System.currentTimeMillis();System.out.println("\n程序運行時間:" + (end - start) + "毫秒");}
}


輸出:1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,
程序運行時間:2.0毫秒

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

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

相關文章

java開發工程師工作內容怎么寫

什么是分布式鎖&#xff1f;在回答這個問題之前&#xff0c;我們先回答一下什么是鎖。 普通的鎖&#xff0c;即在單機多線程環境下&#xff0c;當多個線程需要訪問同一個變量或代碼片段時&#xff0c;被訪問的變量或代碼片段叫做臨界區域&#xff0c;我們需要控制線程一個一個…

community 計算模塊度_光模塊深度:國內光模塊企業快速崛起

一、核心觀點二、發展追溯:技術是底蘊、創新是動力1 光通信發展:技術迭代加快&#xff0c;國產替代是前進的方向依據摩爾定律&#xff0c;光模塊的小型化、低成本以及高速率是產品迭代的主要方向。2 競爭格局:市場集中度高&#xff0c;巨頭地位穩固&#xff0c;國內廠商穩步崛起…

java開發工程師的自我評價

前言 京東到家訂單中心系統業務中&#xff0c;無論是外部商家的訂單生產&#xff0c;或是內部上下游系統的依賴&#xff0c;訂單查詢的調用量都非常大&#xff0c;造成了訂單數據讀多寫少的情況。 我們把訂單數據存儲在MySQL中&#xff0c;但顯然只通過DB來支撐大量的查詢是不…

華為魔術手機拆機圖解_華為P9進水不顯示維修案例

看點&#xff1a;iPhone X原裝屏與國產屏有哪些區別&#xff1f;看點&#xff1a;換7P、8P屏幕&#xff1a;C11和DTP和DKH的區別獅淘&#xff1a;華人手機維修師專屬工具集合店&#xff0c;不銹鋼拆機片5個只需9.9元&#xff01;包郵山貓潮品&#xff1a;手機渠道直供&#xff…

java開發工程師自我介紹文本

前言 每年金三銀四&#xff0c;金九銀十之際&#xff0c;想進階夢想挑戰大廠的朋友層出不窮。 夢想是要有的&#xff0c;萬一就實現了呢&#xff1f;且撇開大牛們不說&#xff0c;每年面試之時問題也層出不窮&#xff0c;不得不說&#xff0c;每年被算法絕殺的朋友也是不在少數…

面向對象技術

面向對象和面向過程的區別 出發點不同。 面向對象強調問題域的要領直接映射到對象和對象之間的接口上&#xff0c;是用符合常規思維的方式來處理客觀世界的問題。 面向過程方法強調的則是過程的抽象化和模塊化&#xff0c;是以過程為中心構造或處理客觀世界問題的。層次邏輯…

ad09只在一定范圍內查找相似對象_23、面向對象編程

目錄&#xff1a;對象的概念類與對象面向對象編程類的定義與實例化屬性訪問類屬性與對象屬性屬性查找順序與綁定方法小結視頻鏈接一 對象的概念”面向對象“的核心是“對象”二字&#xff0c;而對象的精髓在于“整合“&#xff0c;什么意思&#xff1f;所有的程序都是由”數據”…

java開發工程師轉行可以做什么

前言 分布式事務主要解決分布式一致性的問題。說到底就是數據的分布式操作導致僅依靠本地事務無法保證原子性。與單機版的事務不同的是&#xff0c;單機是把多個命令打包成一個統一處理&#xff0c;分布式事務是將多個機器上執行的命令打包成一個命令統一處理。 MySQL 提供了…

atlas怎么看日志_億級的日志治理!微服務最佳方案,ELK stack從零搭建

ELK Stack 誕生背景一般我們需要進行日志分析場景&#xff1a;直接在日志文件中 grep、awk 就可以獲得自己想要的信息。但在規模較大的場景中&#xff0c;此方法效率低下&#xff0c;面臨問題包括日志量太大如何歸檔、文本搜索太慢怎么辦、如何多維度查詢。需要集中化的日志管理…

Java變量類型

所有的變量在使用前必須聲明。 type identifier [ value][, identifier [ value] ...] ; 格式說明&#xff1a;type是數據類型&#xff0c;identifier是變量名&#xff0c;可以使用逗號隔開來聲明多個同類型變量。 一下列出一些變量的聲明實例&#xff0c;有些包含了初始化過…

java開發工程師面試問題大全及答案大全

前言 Alibaba作為國內互聯網行業的“老大”&#xff0c;一直以來也是很多“數碼寶貝”夢寐以求的公司&#xff0c;我個人是做Java開發的&#xff0c;阿里這些年也開發了很多屌炸天的開源項目&#xff0c;像什么Spring Cloud Alibaba&#xff0c;開源Java診斷工具Arthas&#x…

me shy是什么歌 抖音make_內含活動福利 | 小紅書、抖音爆贊的高顏值的北歐家居神店開到卜蜂中心啦!...

幾個月前&#xff0c;一家北歐范顏值爆表的瑞典獨立設計師品牌家居店憑借其充滿設計感的產品刷爆社交媒體微博、小紅書、抖音經常出現它的身影隨便一篇閱讀量、收藏量都好幾萬數不清的爆like讓人按耐不住了&#xff01;這個品牌叫NǒME家居(認住這個正版的ǒ)&#xff0c;開到哪…

java開發工程師面試題及答案

前言 作為一名編程人員&#xff0c;對MySQL一定不會陌生&#xff0c;尤其是互聯網行業&#xff0c;對MySQL的使用是比較多的。對于求職者來說&#xff0c;MySQL又是面試中一定會問到的重點&#xff0c;很多人擁有大廠夢&#xff0c;卻因為MySQL敗下陣來。實際上&#xff0c;My…

呂玉琴考研指導電子版_【干貨大放送】中國歷代文學作品選閱讀指導PDF

跟緊我&#xff0c;來年輕松收獲錄取通知書~長按一戰成碩hello&#xff0c;我是小致帶你考研上路今天給大家分享的干貨內容是《歷代文學作品選》閱讀指導之前1000題濃縮資料&#xff0c;后臺回復【濃縮】獲取不要再留郵箱了&#xff0c;直接后臺獲取本次資料由致遠文學考研原創…

java開發工程師面試題總結

一、背景 我們日常在電商網站購物時經常會遇到一些高并發的場景&#xff0c;例如電商 App 上經常出現的秒殺活動、限量優惠券搶購&#xff0c;還有我們去哪兒網的火車票搶票系統等&#xff0c;這些場景有一個共同特點就是訪問量激增&#xff0c;雖然在系統設計時會通過限流、異…

Java重寫和重載

重寫&#xff08;Override&#xff09; 重寫是子類重寫父類的方法&#xff0c;如果重寫了父類的方法&#xff0c;訪問時父類的方法就會被覆蓋&#xff0c;如果想要再訪問父類的同名方法&#xff0c;要用super關鍵字。重寫的好處在于子類可以根據自己的需要&#xff0c;定義特定…

7天拿到阿里Android崗位offer,都是精髓!

食用指南 和大部分人一樣&#xff0c;我在復習完第一遍Android知識的情況下&#xff0c;看到相關的知識回答的仍然不能夠令自己滿意。 在第二遍系統復習的時候&#xff0c;我著重記住每個知識點的關鍵字&#xff0c;根據這些關鍵字拼湊出大概的知識點&#xff0c;最后看到每個…

kafka 重新分配節點_Kafka控制器-分區重分配

分區重分配指的是將分區的副本重新分配到不同的代理節點上。如果ZK節點中分區的副本的新副本集合和當前分區副本集合相同&#xff0c;這個分區就不需要重新分配了。分區重分配是通過監聽ZK的 /admin/reassign_partitions 節點觸發的&#xff0c;Kafka也提供了相應的腳本工具進行…

7天拿到阿里安卓崗位offer,統統給你解決!

開頭 技術的發展產生了程序員這個職位&#xff0c;從這些年各大互聯網公司曝光的一些員工收入水平來看&#xff0c;程序員的工資還是相對比較高的&#xff0c;可是我們在互聯網上還聽到了另外一種聲音&#xff0c;很多程序員想轉行&#xff0c;特別是大齡程序員&#xff0c;這…

python mysqldb 查詢不到最新記錄_python – MySQLdb是否緩存SELECT結果?

我正在循環中運行SELECT查詢.偶爾,數據庫表會更新(由另一個程序).第一個SELECT檢索正確的數據,但循環中的其他調用返回第一個值.如何檢索最新數據&#xff1f;到目前為止我找到的唯一解決方法是在每次迭代時重新連接到數據庫&#xff01;在我的例子中,取消注釋#1#和#2#的注釋.僅…