輕鬆搞定,Java選擇排序算法

2020-12-23 願編程是詩

前言

不知不覺,今年已經大半年 時間就過去了,很多公司秋招已經開始了,然後數據結構 與算法就是公司常拿來考察同學們的基礎,今天我們一起來學習Java中最簡單的算法,叫選擇排序算法。

正文

選擇排序算法,是一種簡單直觀的排序算法,它的思路是每一次從待排序的數據元素中選出最小(或最大)的一個元素,存放在序列的起始位置,直到全部待排序的數據元素排完。但是注意選擇排序它是不穩定的排序方法的。

代碼演示

public class SelectionSort4 {public static void sort(int[] arr){ for (int i = 0; i < arr.length; 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; } } if (minIndex != i){ arr[minIndex] = arr[i]; arr[i] = min; } } public static void main(String[] args) { int[] arr = {9,8,7,6,3,4,5}; sort(arr); System.out.println(Arrays.toString(arr));}

時間複雜度

選擇排序的時間複雜度為 O(n^2),第一次需要檢查n個元素,隨後檢查的元素數依次為n - 1, n – 2, …, 2和1。所以說平均每次檢查的元素數為1/2 * n, 所以運行時間也就是為 n * 1/2 * n。簡單地寫作 O(n^2)。

如果有需要Java複習腦圖、Java和大數據電子書,關注且私信「資料」即可獲取相關精品教程以及文檔等資料。

相關焦點

  • Java實現冒泡排序算法
    >2.考考你在上一篇:數據結構與算法系列十(排序概述)中,我們列舉了常用的排序算法,以及分析了如何綜合衡量排序算法的優劣。從這一篇開始,我們把每一種排序算法,從算法的思想,到代碼實現都做一個分享。那麼你準備好了嗎?我們這一篇的主角是:冒泡排序#考考你:1.你知道冒泡排序的核心思想嗎?
  • 排序算法:歸併排序
    在日常開發中經常會遇到一類問題,就是對一個集合的數據進行排序掌握一些排序算法,對於日常開發是非常有幫助今天介紹一下歸併排序法01算法邏輯02時間複雜度由上圖邏輯可以得出,歸併排序的循環次數為由算法導論的主定理可以推導出,可見之前的文章(文末有連結)歸併排序的時間複雜度為03空間複雜度由上圖邏輯可以得出,歸併排序每次分解都是要復一份新的數據片段
  • 經典排序算法五 堆排序(JAVA實現)
    堆排序基本原理堆排序是利用堆這種數據結構而設計的一種排序算法,堆排序是一種選擇排序。首先我們來了解下什麼是堆。堆分為兩種:大頂堆和小頂堆,兩者的差別主要在於排序方式。堆是具有以下性質的完全二叉樹:每個結點的值都大於或等於其左右孩子結點的值,稱為大頂堆;或者每個結點的值都小於或等於其左右孩子結點的值,稱為小頂堆。
  • mysql 002|order by的排序算法竟然是這樣的!
    本文轉載自【微信公眾號:java進階架構師,ID:java_jiagoushi】經微信公眾號授權轉載,如需轉載與原文作者聯繫前言平常寫業務的時候,我們經常需要對一些業務數據進行排序拋出本文問題order by 的排序流程是什麼?order by 的排序算法是什麼?order by 的優化點在於什麼?
  • 10大經典排序算法,20+張圖就搞定
    簡介選擇排序是一種簡單直觀的排序算法,它從待排序的數據元素中選出最小或最大的一個元素,存放在序列的起始位置,然後再從剩餘的未排序元素中尋找到最小或最大元素,然後放到已排序的序列的末尾。,簡單選擇排序是等到合適的關鍵字出現後再進行交換,並且交換一次就可以達到一次冒泡的效果。
  • JavaScript實現排序算法
    如4N^2^,大O表示法表示為:O(N^2^);二、排序算法這裡主要介紹幾種簡單排序和高級排序:簡單排序:冒泡排序、選擇排序、插入排序;高級排序:所以選擇排序的效率高於冒泡排序;3.插入排序插入排序是簡單排序中效率最高的一種排序。
  • 排序算法之高效排序法
    高效排序算法桶排序桶排序 (Bucket sort)或所謂的箱排序,是一個排序算法,工作的原理是將數組分到有限數量的桶子裡。每個桶子再個別排序(有可能再使用別的排序算法或是以遞歸方式繼續使用桶排序進行排序)。桶排序原理介紹桶排序是計數排序的升級版。它利用了函數的映射關係,高效與否的關鍵就在於這個映射函數的確定。
  • 基礎不牢地動山搖記住 Java 面試中常用的八種排序算法與代碼實現
    本文轉載自【微信公眾號:java進階架構師,ID:java_jiagoushi】經微信公眾號授權轉載,如需轉載與原文作者聯繫1.直接插入排序經常碰到這樣一類排序問題:把新的數據插入到已經排好的數據列中。
  • 五大常用算法:一文搞懂分治算法
    在計算機科學中,分治法就是運用分治思想的一種很重要的算法。分治法是很多高效算法的基礎,如排序算法(快速排序,歸併排序),傅立葉變換(快速傅立葉變換)等等。將父問題分解為子問題同等方式求解,這和遞歸的概念很吻合,所以在分治算法通常以遞歸的方式實現(當然也有非遞歸的實現方式)。
  • ...選擇,插入,希爾,歸併,快排,堆排序,計數排序,桶排序,基數排序)
    一、前言傳統的計算機算法和數據結構領域,都是基於java或者c/c++等。沒用javascript實現過或是沒仔細看過相關算法的原理,導致寫起來浪費很多時間。對於一個前端來說,尤其是筆試面試的時候,算法方面考的其實不難(十大排序算法或是和十大排序算法同等難度的)。
  • JavaScript算法之快速排序
    如果你在面試軟體工程師的職位,經常被問到的一個問題是快速排序是如何工作的。快速排序最簡單的邏輯步驟如下:選擇一個基準元素,把數組分為兩個子數組。有些算法選擇第一個元素為基準,這樣不是最佳選擇,因為對於已排序的數組來說這樣做的性能是最差的。
  • 為什麼要排序?排序算法的性能提升之道
    那麼,如何實現排序呢?這些排序算法,你應該了解。冒泡排序這是最簡單的排序算法。只需比較每對相鄰的元素,並檢查元素是否有序,否則交換兩個元素,直到所有元素都被排序為止。改進版冒泡排序:如果看一下代碼,就會發現在上述排序算法中即使數組已經排序,時間複雜度也將相同,即O(n)。為了克服這個問題,提出了一種改進算法。創建一個標誌來確定數組是否已排序,該標誌會檢查所有相鄰對之間是否發生了交換。
  • 程式設計師必備的幾種常見排序算法和搜索算法總結
    , 但是基礎還是要好好鞏固一下的.本文將以圖文的形式為大家介紹如下算法知識,希望在讀完之後大家能有所收穫:冒泡排序及其優化選擇排序插入排序歸併排序.在真實項目中我們往往不會採用冒泡排序,更多的會用快速排序或者希爾排序.關於排序算法性能問題我在《前端算法系列》如何讓前端代碼速度提高60倍有詳細介紹.
  • 用Python實現常見的四種排序算法
    排序是每個軟體工程師和開發人員都需要掌握的技能。不僅要通過編程面試,還要對程序本身有一個全面的理解。不同的排序算法很好地展示了算法設計上如何強烈的影響程序的複雜度、運行速度和效率。排序有很多種實現方法,比如冒泡排序、選擇排序、歸併排序、希爾排序、快速排序、插入排序、堆排序、基數排序等,今天就給大家介紹使用Python語言實現的其中4個排序算法。1. 快速排序首先要打亂序列順序 ,以防算法陷入最壞時間複雜度。快速排序使用「分而治之」的方法。
  • 2020學習Java必看的3本書籍
    本書的目標是幫助讀者更加有效地使用Java程式語言及其基本類庫:java.lang、java.util和java.io,以及子包,如java.util.concurrent和java.util.function。本書時不時地也會討論其他的類庫。3.
  • 力扣(LeetCode)- 常見的排序算法總結
    如何分析一個排序算法好壞時間複雜度、比較和交換次數、原地排序(空間複雜度為(1))、排序穩定性(相等元素之間的位置先後順序不變)。有序度:是數組中具有有序關係的元素對的個數逆序度:和有序度相反。選擇排序是不穩定排序,所以應用最少。
  • 視覺直觀感受 7 種常用的排序算法
    事實上,快速排序通常明顯比其他Ο(n log n) 算法更快,因為它的內部循環(inner loop)可以在大部分的架構上很有效率地被實現出來,且在大部分真實世界的數據,可以決定設計的選擇,減少所需時間的二次方項之可能性。
  • 快速搞定Java圖形繪製之標籤組件與圖標
    今天碼農工教大家如何快速搞定Java中的標籤組建與圖標。首先,我們要考慮一下,我們通常是在那種情況下會使用標籤與圖標呢?答案是當我們需要顯示文本的或者提示信息時,我們通常會使用標籤。創建圖片Swing中的圖標可由你電腦中的任意圖片創建,創建圖標的過程中利用了java.swing.ImageIcon類根據現有的圖片繪製圖標,並實現Icon接口。下面是ImageIcon類的構造方法。
  • 手敲一遍數據結構和排序算法
    排序算法 性質記憶 冒泡排序 選擇排序 插入排序 快速排序 歸併排序 希爾排序 堆排序數據結構 數組 堆 棧 隊列 鍊表 二叉樹 二叉搜索樹 圖 哈希表搜索 廣度優先搜索 深度優先搜索附件 排序算法代碼點擊
  • JavaScript算法之歸併排序
    歸併排序(merge sort 或 mergesort)是一種經常被提及的排序算法,它的效率比較高,也是採用了分治法(Divide and Conquer),可以採用遞歸方式運行。這種算法的核心思想分為兩部分:分割:把未排序的列表劃分為 n 個子列表,每個包含一個元素(只有一個元素的列表被認為是有序的)。合併:不停地合併子列表生成新的已排序列表,直到最後合併為一個已排序的列表。