【排序算法】③直接選擇排序

系列文章目錄

?第一篇:【排序算法】①直接插入排序-CSDN博客

第二篇:【排序算法】②希爾排序-CSDN博客

第三篇:【排序算法】③直接選擇排序-CSDN博客

第四篇:【排序算法】④堆排序-CSDN博客

第五篇:【排序算法】⑤冒泡排序-CSDN博客

第六篇:【排序算法】⑥快速排序:Hoare、挖坑法、前后指針法-CSDN博客

第七篇:【排序算法】⑦歸并排序-CSDN博客


目錄

系列文章目錄

前言

一、直接選擇排序是什么?

算法思想

二、實現直接選擇排序

三、分析直接選擇排序

直接選擇排序的特征

與直接插入排序的區別

總結



前言

直接選擇排序比較簡單,實現起來較容易,但是直接選擇排序與直接插入排序的區別難以理清,筆者下方整理一個表格供參考。


一、直接選擇排序是什么?

算法思想

直接選擇排序的思想是:

每次從未排序部分選擇最小(或最大)元素,放到已排序部分的末尾。 通過不斷選擇剩余元素中的最小者來實現排序。

直接選擇排序為什么能實現排序?
很好理解,假設i=0是數組下標,n是數據個數。直接選擇排序就是簡單粗暴的從未排序的數據集中挑出最小/最大,放在第i個位置處,i++,未排序的數據個數就變成n-i個,重復直到i==n-1(數組下標)。

二、實現直接選擇排序

博主這里以升序為例:

void SelectionSort(int* a, int n)
{if (!a)return;for (int i = 0; i < n; ++i){int _min = i;for (int j = i + 1; j < n; j++){if (a[j] < a[_min])_min = j;}swap(&a[i], &a[_min]);}
}void swap(int* a, int* b)
{int temp = *a;*a = *b;*b = temp;
}

依據算法,從數據集中,挑選處特征碼最小/最大的數據放在已排序的末尾。

①_min變量用于存儲合適數據的下標。從第i號,到之后的未排數據中選擇最小或最大的數據,_min保存其下標,等內循環結束交換數據值;

②外循環,每一次循環的目的是在未排數據中尋找最小/最大的值;內循環,作用是依次拿未排數據與a[i]比較大小。

三、分析直接選擇排序

直接選擇排序的特征

1. 直接選擇排序非常好理解,但是效率不是很好,故實際中很少使用;
2. 時間復雜度:O(N^2)
3. 空間復雜度:O(1)
4. 穩定性:不穩定。

與直接插入排序的區別

直接選擇排序與直接插入排序的區別是什么?

直接選擇排序: 每次從未排序部分選擇最小(或最大)元素,放到已排序部分的末尾。 通過不斷選擇剩余元素中的最小者來實現排序。

直接插入排序: 將未排序部分的元素逐個插入到已排序部分的適當位置。 即,將元素插入到已排序序列中的正確位置,從而逐步構建有序序列。

特性直接選擇排序直接插入排序
基本思想在未排序序列中選擇最小元素放入已排序序列末尾將未排序元素插入已排序序列的合適位置
操作核心選擇 + 交換比較 + 移位
時間復雜度永遠 O(n2)(任何情況平均 O(n2),但有序時最優 O(n)
空間復雜度O(1)(原地)O(1)(原地)
穩定性?不穩定(交換破壞順序)穩定(保持相同元素順序)
數據敏感性無關數據分布(固定比較次數)強相關(有序數據效率飆升)
交換/移動次數交換次數少(n-1次)移動次數多(需整體移位)


總結

本文是【排序算法】系類第三篇,直接選擇排序較為簡單故篇幅較短。

來不及懷念直接選擇排序了,接下來登場的是常用且效率高、結構較復雜的另一種選擇排序算法:堆排序!

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

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

相關文章

2024年ESWA SCI1區TOP,自適應種群分配和變異選擇差分進化算法iDE-APAMS,深度解析+性能實測

目錄1.摘要2.自適應種群分配和變異選擇差分進化算法iDE-APAMS3.結果展示4.參考文獻5.代碼獲取6.算法輔導應用定制讀者交流1.摘要 為了提高差分進化算法&#xff08;DE&#xff09;在不同優化問題上的性能&#xff0c;本文提出了一種自適應種群分配和變異選擇差分進化算法&…

目標檢測數據集 - 無人機檢測數據集下載「包含COCO、YOLO兩種格式」

數據集介紹&#xff1a;無人機檢測數據集&#xff0c;真實采集高質量含無人機圖片數據&#xff0c;適用于空中飛行無人機的檢測。數據標注標簽包括 drone 無人機一個類別&#xff1b;適用實際項目應用&#xff1a;無人機檢測項目&#xff0c;以及作為通用檢測數據集場景數據的補…

Linux DNS服務解析原理與搭建

一、什么是DNSDNS 是域名服務 (Domain Name System) 的縮寫&#xff0c;它是由解析器和域名服務器組成的。 域名服務器是指保存有該網絡中所有主機的域名和對應IP地址&#xff0c; 并具有將域名轉換為IP地址功能的服務器。 域名必須對應一個IP地址&#xff0c;而IP地址不一定有…

typecho博客設置瀏覽器標簽頁圖標icon

修改瀏覽器標簽頁圖標&#xff08;favicon.ico&#xff09;&#xff1a;第1種&#xff1a;上傳到服務器本地目錄1、制作圖標文件&#xff1a;準備一張長寬比為 1:1 的圖片&#xff0c;將其上傳到第三方 ico 生成網站&#xff0c;生成后綴為.ico 的圖片文件&#xff0c;并將其命…

LoadBalancingSpi

本文是 Apache Ignite 中 Load Balancing SPI&#xff08;負載均衡服務提供接口&#xff09; 的核心說明&#xff0c;特別是其默認實現 RoundRobinLoadBalancingSpi 的工作原理。 它解釋了 Ignite 如何在集群中智能地將任務&#xff08;Job&#xff09;分配到不同的節點上執行&…

Day43--動態規劃--674. 最長連續遞增序列,300. 最長遞增子序列,718. 最長重復子數組

Day43–動態規劃–674. 最長連續遞增序列&#xff0c;300. 最長遞增子序列&#xff0c;718. 最長重復子數組 674. 最長連續遞增序列 方法&#xff1a;動態規劃 思路&#xff1a; dp[i]含義&#xff1a;到i這個位置&#xff08;包含i&#xff09;的連續遞增子序列的長度遞推…

支持 UMD 自定義組件與版本控制:從 Schema 到動態渲染

源碼 ? 支持 UMD 自定義組件與版本控制&#xff1a;從 Schema 到動態渲染 在低代碼平臺或可視化大屏 SDK 中&#xff0c;支持用戶上傳自定義組件 是一個必備能力。 而在 React 場景下&#xff0c;自定義組件通常以 UMD 格式 打包并暴露為全局變量。 本篇文章&#xff0c;我…

zookeeper3.8.4安裝以及客戶端C++api編譯

服務端直接下載編譯好的bin版本 Apache Download Mirrors C客戶端需要編譯庫文件 zookeeper 3.8.4 使用與C API編譯 - 丘貍尾 - 博客園 雜七雜八的依賴 sudo apt update sudo apt install -y \autoconf automake libtool libtool-bin m4 pkg-config gettext \cmake build-es…

使用行為樹控制機器人(一) —— 節點

文章目錄一、背景需求二、創建ActionNodes1. 功能實現1.1 頭文件定義1.2 源文件實現1.3 main文件實現1.4 my_tree.xml 實現2. 執行結果三、 執行失敗處理1. 添加嘗試次數1.1 功能實現1.2 實驗結果2. 完善異常處理2.1 多節點組合兜底2.2 實驗結果使用行為樹控制機器人(一) —— …

JavaScript Window Location

JavaScript Window Location JavaScript中的window.location對象是操作瀏覽器地址欄URL的一個非常有用的對象。它允許開發者獲取當前頁面的URL、查詢字符串、路徑等&#xff0c;并且可以修改它們來導航到不同的頁面。以下是關于window.location的詳細解析。 1. window.location…

Kubernetes生產環境健康檢查自動化指南

核心腳本功能&#xff1a; 一鍵檢查集群核心組件狀態自動化掃描節點/Pod異常存儲與網絡關鍵指標檢測風險分級輸出&#xff08;紅/黃/綠標識&#xff09;一、自動化巡檢腳本 (k8s-health-check.sh) #!/bin/bash # Desc: Kubernetes全維度健康檢查腳本 # 執行要求&#xff1a;kub…

消息隊列系統測試報告

目錄 一、項目背景 二、RabbitMQ介紹 1.什么是RabbitMQ&#xff1f; 2.RabbitMQ的工作流程是怎么樣的&#xff1f; 3.項目設計 三、測試概述 MQ 測試目標&#xff1a; 測試用例統計&#xff1a; 核心模塊測試詳情及代碼示例&#xff1a; 1. 數據庫管理&#xff08;Da…

基于 Axios 的 HTTP 請求封裝文件解析

import axios from "axios"; import { ElMessage } from "element-plus"; import store from "/store"; import router from "/router";// 創建axios實例 const service axios.create({baseURL: "http://localhost:8080/api&quo…

PowerDesigner生成帶注釋的sql方法

前提是name里面是有文字的&#xff1a; 方法開始&#xff1a; 第一步&#xff1a; Database → Edit Current DBMS → Script → Objects → Column → Add 把輸出模板改成&#xff1a; %20:COLUMN% %30:DATATYPE%[.Z:[%Compressed%? compressed][ %NULLNOTNULL%][%IDENTITY…

獵板PCB:專業鍵盤PCB板解決方案供應商

獵板PCB深耕印刷電路板&#xff08;PCB&#xff09;制造領域&#xff0c;憑借前沿技術與深厚積淀&#xff0c;在鍵盤PCB板細分市場積極布局&#xff0c;致力于為不同客戶提供多樣化、高性能的鍵盤PCB板產品&#xff0c;滿足多元需求。一、定義&#xff1a;鍵盤PCB板鍵盤PCB板&a…

基于 Spring Boot 的登錄功能實現詳解

在 Web 應用開發中&#xff0c;登錄功能是保障系統安全的第一道防線。本文將結合實際代碼&#xff0c;詳細解析一個基于 Spring Boot 框架的登錄功能實現&#xff0c;包括驗證碼生成、用戶驗證、Token 機制等關鍵環節。技術棧概覽本登錄功能實現涉及以下核心技術和組件&#xf…

vue+django 大模型心理學智能診斷評測系統干預治療輔助系統、智慧心理醫療、帶知識圖譜

vuedjango 大模型心理學智能診斷評測系統干預治療輔助系統、智慧心理醫療、帶知識圖譜文章結尾部分有CSDN官方提供的學長 聯系方式名片 文章結尾部分有CSDN官方提供的學長 聯系方式名片 關注B站&#xff0c;有好處&#xff01;編號:D003 pro基于大模型心理學問卷、智能診斷&…

【linux】企業級WEB應用服務器tomcat

一 WEB技術1.1 HTTP協議和B/S 結構操作系統有進程子系統&#xff0c;使用多進程就可以充分利用硬件資源。進程中可以多個線程&#xff0c;每一個線程可以被CPU調度執行&#xff0c;這樣就可以讓程序并行的執行。這樣一臺主機就可以作為一個服務器為多個客戶端提供計算服務。客戶…

【Unity優化】Unity多場景加載優化與資源釋放完整指南:解決Additive加載卡頓、預熱、卸載與內存釋放問題

【Unity優化】Unity多場景加載優化與資源釋放完整指南&#xff1a;解決Additive加載卡頓、預熱、卸載與內存釋放問題 本文將完整梳理 Unity 中通過 SceneManager.LoadSceneAsync 使用 Additive 模式加載子場景時出現的卡頓問題&#xff0c;分析其本質&#xff0c;提出不同階段的…