排序算法---選擇排序

1.實現流程:?

1. 把第一個沒有排序過的元素設置為最小值;

2.?遍歷每個沒有排序過的元素;

3.?如果元素 < 現在的最小值;

4.?將此元素設置成為新的最小值;

5.?將最小值和第一個沒有排序過的位置交換

選擇排序執行流程

2.代碼實現

        let arr = [17,25,25,28,38,3,43,43,35,45,5]function chooseSort() {let indexMin = 0;// 選擇n-1次for (let i=0; i<arr.length-1; i++) {let indexMin = i;for (let j=i+1; j<arr.length; j++) {if (arr[j]<arr[indexMin]) {indexMin = j;}}if (indexMin != i) {let temp = arr[i];arr[i] = arr[indexMin];arr[indexMin] = temp;}}console.log(arr)}chooseSort()

運行結果:

3.復雜度分析

1. 時間復雜度:找出執行次數最多的語句即可

if (arr[j]<arr[indexMin]) {indexMin = j;
}

基于上述每一趟比較的次數,可以得到總的比較次數,就是這個判斷語句執行的次數

=> 當i=0時, 需要比較n-1-0次

? ? ?當i=1時,需要比較n-1-1次

? ? ?......

? ? ?當i=n-3時, 需要比較n-1-(n-3) = 2

? ? ?當i=n-2時, 需要比較n-1-(n-2) = 1

? ? ?當i=n-1時, 需要比較n-1-(n-1) = 0

=> ?(n-1)+(n-2)+(n-3)+...+1+0 = [n(n-1)]/2 ?= n^2/2 - n/2 + 1/2

=> 去掉系數、低階和常量 ?

=> 則時間復雜度為 ?O(n^2)

2. 空間復雜度: 冒泡排序中并沒有用到額外的空間,所以空間復雜度為 O(1)

3. 冒泡排序是不穩定的排序算法:從上述的視頻可以看出,數組中有兩個43,然而在排完序后,原本前面的43跑到了后面

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

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

相關文章

初識Ceph --組件、存儲類型、存儲原理

目錄 ceph組件存儲類型塊存儲文件存儲對象存儲 存儲過程 ceph Ceph&#xff08;分布式存儲系統&#xff09;是一個開源的分布式存儲系統&#xff0c;設計用于提供高性能、高可靠性和可擴展性的存儲服務&#xff0c;可以避免單點故障&#xff0c;支持塊存儲、對象存儲以及文件系…

【小白專用】Apache2.4+PHP8.3+MYSQL的配置

1.下載PHP和Apache 1、PHP下載 PHP For Windows: Binaries and sources Releases 注意&#xff1a; 1.使用Apache作為服務器的話&#xff0c;一定要下載Thread Safe的&#xff0c;否則沒有php8apache2_4.dll這個文件&#xff0c; 如果使用IIS的請下載 NON Tread safe的 2.如果…

USB連接器

USB連接器 電子元器件百科 文章目錄 USB連接器前言一、USB連接器是什么二、USB連接器的類別三、USB連接器的應用實例四、USB連接器的作用原理總結前言 USB連接器的使用廣泛,幾乎所有現代電子設備都具備USB接口,使得設備之間的數據傳輸和充電變得簡單和便捷。 一、USB連接器是…

element-ui按鈕el-button,點擊之后恢復之前的顏色

在開發過程中, 使用el-button 按鈕點擊之后, 沒有恢復到之前的顏色, 還是保持點擊之后的顏色,需要解決這個問題, <template><div><el-button size"mini" type"primary" plain click"onClick($event)">按鈕</el-button>…

iOS按鈕控件UIButton使用

1.在故事板中添加按鈕控件,步聚如下: 同時按鈕Shift+Commad+L在出現在控件庫中選擇Button并拖入View Controller Scene中 將控件與變量btnSelect關聯 關聯后空心變實心 如何關聯?直接到屬性窗口拖按鈕變量到控件上,出現一條線,然后松開,這樣就關聯成功了 關聯成功后屬性窗口…

LinuxBasicsForHackers筆記 -- 了解和檢查無線網絡

無線網絡 AP (access point) – 無線用戶連接以訪問互聯網的設備。SSID (service set identifier) – 網絡的名稱。ESSID (extended service set identifier) – 與 SSID 相同&#xff0c;但它可用于無線 LAN 中的多個 AP。BSSID (basic service set identifier) – 每個AP的唯…

ISP IC/FPGA設計-第一部分-MT9V034攝像頭分析(0)

MT9V034為CMOS圖像傳感器&#xff0c;有著極其優秀的圖像成像性能&#xff0c;同時支持豐富的功能用于isp的開發&#xff1b;MT9V034 的HDR寬動態、10bit數據深度、RAW格式&#xff08;bayer陣列&#xff09;圖像、dvp和lvds接口、60fps正是學習isp開發的理想傳感器&#xff1b…

使用Git進行版本控制

參考&#xff1a;《Python編程從入門到實踐》 前言1、安裝、配置 Git1.1 在Linux系統中安裝Git1.2 在OS X系統中安裝Git1.3 在Windows系統中安裝Git1.4 配置Git 2、創建項目3、忽略文件4、初始化倉庫5、檢查狀態6、將文件加入到倉庫中7、執行提交8、查看提交歷史 前言 版本控制…

C語言 預處理 + 條件編譯宏 + 井號運算符

預處理階段任務 預處理指令 條件編譯宏 條件編譯宏的作用在于根據編譯時的條件進行代碼的選擇性編譯&#xff0c;從而實現不同環境、不同配置或不同功能的編譯版本。 這可以用于實現調試模式和發布模式的切換&#xff0c;平臺適配&#xff0c;以及選擇性地編譯不同的功能模塊等…

Git merge 與 Git rebase 與 Git fetch

Git merge 與 Git rebase 看這個圖就行了 git merge、git rebase 和 git fetch 是 Git 中的三個不同的命令&#xff0c;它們分別用于不同的目的。以下是它們的主要區別&#xff1a; git merge&#xff08;合并&#xff09;&#xff1a; 用途&#xff1a; 用于將一個分支的更改…

基于hadoop下的spark安裝

目錄 簡介 安裝準備 spark安裝 配置文件配置 簡介 Spark主要?于?數據的并?計算&#xff0c;?Hadoop在企業主要?于?數據的存儲&#xff08;?如HDFS、Hive和HBase 等&#xff09;&#xff0c;以及資源調度&#xff08;Yarn&#xff09;。但是也有很多公司也在使?MR2進…

【Spring教程24】Spring框架實戰:從零開始學習SpringMVC 之 SpringMVC入門案例代碼示例

目錄 1:創建Maven項目&#xff0c;并導入對應的jar包2:創建控制器類3:創建配置類4:創建Tomcat的Servlet容器配置類5:配置Tomcat環境6:啟動運行項目7:瀏覽器訪問8:知識點總結 歡迎大家回到《Java教程之Spring30天快速入門》&#xff0c;本教程所有示例均基于Maven實現&#xff0…

【數學建模】《實戰數學建模:例題與講解》第八講-回歸分析(含Matlab代碼)

【數學建模】《實戰數學建模&#xff1a;例題與講解》第八講-回歸分析&#xff08;含Matlab代碼&#xff09; 回歸分析基本概念經典多元線性回歸&#xff08;MLR&#xff09;主成分回歸&#xff08;PCR&#xff09;偏最小二乘回歸&#xff08;PLS&#xff09;建模過程應用和優勢…

2023年12月11日-12月17日(項目需求+ue5底層渲染)

可以試試每小時項目需求內容ue5底層渲染交替進行。 周一&#xff1a; 6&#xff1a;11–&#xff0c;ue5底層渲染02A15

C# List類常用操作 之 查找

// // // 作者&#xff1a;鳥哥 // // email:xiaoniao2003gmail.com // // using System; using System.Collections.Generic; using System.Linq; using System.Runtime.Serialization.Formatters;class Program {class Student{internal string Name;internal int Ag…

Pandas實踐_pandas基礎

文章目錄 一、文件的讀取和寫入1.文件讀取2.數據寫入 二、基本數據結構1.Series2.DataFrame 三、常用基本函數1.匯總函數2.特征統計函數3.唯一值函數4.替換函數5.排序函數6.apply方法 四、窗口對象1.滑窗對象2.擴張窗口 一、文件的讀取和寫入 1.文件讀取 pandas可以讀取的文件…

rust宏(macro)詳解

前言 rust 學習曲線非常陡峭&#xff0c;但是基本語法也還算挺好理解&#xff0c;自動內存管理有點類似智能指針&#xff0c;基本看一下語法入門就可以大概理解&#xff0c;但是唯獨宏很難理解&#xff0c;語法非常晦澀。但是功能非常強大。聲明宏類似于c語言的宏處理&#xf…

docker-ubuntu中基于keepalived+niginx模擬主從熱備完整過程

一、環境準備 &#x1f517;在Ubuntu中安裝docker 二、主機 1、環境搭建 1.1 鏡像拉取 docker pull ubuntu:16.041.2 創建網橋 docker network create -dbridge --subnet192.168.126.0/24 br11.3 啟動容器 docker run -it --name ubuntu-1 --privileged -v /home/vac/l…

為 Compose MultiPlatform 添加 C/C++ 支持(2):在 jvm 平臺使用 jni 實現桌面端與 C/C++ 互操作

前言 在上篇文章中我們已經介紹了實現 Compose MultiPlatform 對 C/C 互操作的基本思路。 并且先介紹了在 kotlin native 平臺使用 cinterop 實現與 C/C 的互操作。 今天這篇文章將補充在 jvm 平臺使用 jni。 在 Compose MultiPlatform 中&#xff0c;使用 jvm 平臺的是 An…

Kubernetes實戰(十)-升級k8s集群

1 Kubernetes(k8s) 集群升級過程 Kubernetes 使用 kubeadm 工具來管理集群組件的升級。在集群節點層面&#xff0c;升級 Kubernetes(k8s)集群的過程可以分為以下幾個步驟&#xff1a; 1&#xff09;檢查當前環境和配置是否滿足升級要求。 2&#xff09;升級master主節點&…