圖解簡單選擇排序C語言實現

1 簡單選擇排序

簡單選擇排序(Simple Selection Sort)是一種基礎且直觀的排序算法,其核心思想是通過重復選擇未排序部分中的最小(或最大)元素,并將其放到已排序部分的末尾,逐步完成整個序列的排序。

1.1 基本概念與原理

簡單選擇排序(Simple Selection Sort)是一種基于比較的原地排序算法,其核心思想是將待排序序列分為已排序和未排序兩部分,通過不斷選擇未排序部分中的最小元素,并將其交換到已排序部分的末尾,逐步完成整個序列的排序。
該算法的主要特點包括:
?不穩定排序?:相同元素的相對位置可能在排序過程中改變
?原地排序?:不需要額外的存儲空間
?直觀簡單?:算法邏輯易于理解和實現
選擇排序的基本原理可以類比為"每次從剩余未排序元素中挑選最小的一個放到正確位置"。這種逐步選擇最小元素的策略使得算法具有確定性,無論輸入數據的初始順序如何,其比較次數都是固定的。

1.2 算法執行過程

選擇排序的具體執行步驟如下:
?1.初始化階段?
(1)將整個數組視為未排序部分
(2)已排序部分初始為空
2?.查找最小值階段?
(1)從當前未排序部分的第一個元素開始遍歷
(2)記錄當前最小元素的索引
?3.比較交換階段?
(1)將當前元素與已記錄的最小元素比較
(2)如果發現更小的元素,更新最小元素索引
4?.位置交換階段?
(1)遍歷完成后,將未排序部分的第一個元素與找到的最小元素交換
(2)此時已排序部分增加一個元素
?5.迭代重復?
(1)縮小未排序部分的范圍
(2)重復步驟2-4,直到未排序部分只剩一個元素
執行示例
以數組[64, 25, 12, 22, 11]為例:
第一輪:找到最小值11,與64交換 → [11, 25, 12, 22, 64]
第二輪:在剩余部分找到最小值12,與25交換 → [11, 12, 25, 22, 64]
第三輪:找到最小值22,與25交換 → [11, 12, 22, 25, 64]
第四輪:找到最小值25,位置正確 → 排序完成

1.3 算法復雜度分析

時間復雜度
?最壞情況?:O(n2) - 需要進行n(n-1)/2次比較
?最好情況?:O(n2) - 即使輸入已經有序,仍需相同數量的比較
?平均情況?:O(n2) - 比較次數與輸入順序無關
空間復雜度
?空間復雜度?:O(1) - 僅需常數級別的額外空間用于交換元素

1.4 C語言實現簡單選擇排序

#include <stdio.h>#define SORT_DATA_TYPE int/*** @brief 打印數據** @param arr 數組* @param n 數組元素個數*/
void print_array(int arr[], unsigned int n)
{unsigned int i;for (i = 0; i < n; i++){printf("%d ", arr[i]);}printf("\n");
}/*** @brief 簡單選擇排序** @param arr 待排序的數組* @param n 數組元素個數*/
void simple_selection_sort(SORT_DATA_TYPE arr[], unsigned int n)
{int swap_flg;SORT_DATA_TYPE temp;unsigned int i;unsigned int j;for (i = 0; i < (n - 1); i++){for (j = (i + 1); j < n; j++){if (arr[j] < arr[i]){temp = arr[i];arr[i] = arr[j];arr[j] = temp;}print_array(arr, n); /* 查看每次排序結構,調試使用 */}}
}int main()
{SORT_DATA_TYPE arr[] = {1, 2, 3, 4};unsigned int n = sizeof(arr) / sizeof(arr[0]);printf("old arr : ");print_array(arr, n);simple_selection_sort(arr, n);printf("new arr : ");print_array(arr, n);return 0;
}


不同類型的數組直接將SORT_DATA_TYPE全部替換為需要的類型,然后刪除多余的宏定義即可支持任意類型數組的簡單選擇排序。

1.5 簡單測試

通過使用2個數組[4,3,2,1]及[1,2,3,4]演示最壞情況和最好情況簡單選擇排序的執行過程:
最壞情況
在這里插入圖片描述
最壞情況需要進行n(n-1)/2次比較,也就是6次比較。可以使用如下圖片演示這一過程:
在這里插入圖片描述
最好情況
在這里插入圖片描述
最好情況需要進行n(n-1)/2次比較,也就是6次比較。

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

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

相關文章

FPS游戲時,你的電腦都在干什么(CS2)

人物介紹&#xff1a;CPU > 你忠實的處理器 i5-13600KFGPU > 你花大價錢買的顯卡 RTX3060&#xff08;不是自己的配置&#xff0c;自己的是XEON E5GTX1060&#xff0c;測不出來&#xff0c;上面是社區一個好心大哥的數據&#xff0c;較為精準&#xff09;&#…

MySQL完整重置密碼流程(針對 macOS)

MySQL完整重置密碼流程&#xff08;針對 macOS&#xff09; 1. 強制停止 MySQL 服務 sudo /usr/local/mysql/support-files/mysql.server stop sudo killall mysqld mysqld_safe # 確保所有進程停止2. 以安全模式啟動&#xff08;跳過權限驗證&#xff09; sudo /usr/local/my…

Python數據類型轉換詳解:從基礎到實踐

在Python編程中&#xff0c;數據類型轉換是一項基礎且頻繁使用的操作。無論是處理用戶輸入、進行數值計算還是數據處理&#xff0c;都離不開類型轉換。本文將系統介紹Python中的數據類型體系&#xff0c;詳解類型轉換的規則與實踐技巧&#xff0c;幫助你在實際開發中靈活運用。…

智能制造——解讀車企數字化轉型構建高效經營管理數據治理體系【附全文閱讀】

適應人群為車企數字化轉型決策者、數據管理負責人、IT 部門從業者、財務及業務部門管理者。主要內容圍繞車企數字化轉型中經營管理數據治理體系構建展開,核心包括診斷背景(以經營管理數字化為切入點,聚焦財務業務在線化、零點月結等痛點,應對系統與數據問題);現狀診斷(從…

STM32的UART奇偶校驗注意

關鍵點&#xff1a;設置為9位數據位&#xff0c; STM32的UART奇偶校驗注意_stm32串口奇校驗初始化程序-CSDN博客https://blog.csdn.net/JacobFang/article/details/118993643 特此記錄 anlog 2025年8月13日

Origin繪制正態分布直方圖+累積概率圖|科研論文圖表教程(附數據格式模板)

免費查看完整教程(包括數據格式) ↑ ↑ ↑ 目錄 本 期 導 讀 No.1 理解圖形 1 定義 2 圖形特點 3 應用場景 No.2 畫圖教程 1 導入數據,繪制圖形 2 設置繪圖細節 本 期 導 讀 直方圖,以柱狀高低直觀展現各區間數據的分布密度,集中趨勢、離散程度與異常…

Python入門第6課:文件操作之讀寫文本、CSV與JSON文件

Python入門第6課:文件操作之讀寫文本、CSV與JSON文件 作者: 蛋皮 標簽: Python, 文件操作, 讀寫文件, 文本文件, CSV, JSON 在掌握了Python的基礎語法、數據結構和函數之后,你的程序已經能夠處理內存中的數據。但現實世界的數據通常存儲在文件中。無論是用戶的配置信息、日…

基于Uni-app+vue3實現微信小程序地圖固定中心點范圍內拖拽選擇位置功能(分步驟詳解)

一、功能概述與實現步驟1.1 功能需求顯示地圖并固定中心點標記繪制服務區域多邊形邊界實時檢測拖拽后位置是否在服務區內提供位置確認和超出范圍提示功能1.2 實現步驟分解第一步&#xff1a;初始化地圖基礎配置創建Map組件并設置基本屬性定義服務區域多邊形坐標設置地圖初始中心…

《設計模式》抽象工廠模式

1.抽象工廠模式定義 抽象工廠模式&#xff08;Abstact Factory &#xff09;&#xff1a; 提供一個創建一系列相關或者相互依賴對象的接口&#xff0c;而無須指定它們具體的類。 1.1 UML圖&#xff1a;2.抽象工廠模式舉例&#xff1a; 業務場景&#xff1a;需要實現一個數據訪問…

git stash臨時保存工作區

通過git stash 可以靈活管理臨時修改&#xff0c;保持工作區整潔&#xff0c;是多人協作或多任務切換時的常用工具&#xff0c;主要用于臨時保存工作區和暫存區修改的命令&#xff0c;常用于以下場景&#xff1a;&#xff08;1&#xff09;需要切換分支&#xff0c;但不想立即提…

Vue 3.5+ Teleport defer 屬性詳解:解決組件渲染順序問題的終極方案

&#x1f4cb; 概述 Vue 3.5 引入了 Teleport 的 defer 屬性&#xff0c;這是一個重要的延遲解析特性。傳統的 Teleport 在組件掛載時會立即解析目標容器&#xff0c;而 defer 屬性允許推遲 Teleport 的目標解析&#xff0c;直到應用的其他部分掛載完成。 ?? 傳統 Teleport …

【102頁PPT】某著名企業智能制造解決方案及智能工廠產品介紹(附下載方式)

篇幅所限&#xff0c;本文只提供部分資料內容&#xff0c;完整資料請看下面鏈接 https://download.csdn.net/download/2501_92808811/91662620 資料解讀&#xff1a;某著名企業智能制造解決方案及智能工廠產品介紹 詳細資料請看本解讀文章的最后內容 智能制造背景與整體規劃…

Revisiting Character-level Adversarial Attacks for Language Models

文章目錄**核心設計目標****關鍵步驟與實現細節**1. **候選位置選擇&#xff08;Algorithm 1: get_top_locations&#xff09;**2. **擾動生成與篩選&#xff08;Algorithm 2: Charmer&#xff09;**3. **適配大語言模型&#xff08;LLM&#xff09;的攻擊****實驗中的性能表現…

(一)Python + 地球信息科學與技術 (GeoICT)=?

目錄 引子 一、核心定位&#xff1a;Python 為何能重塑 GeoICT&#xff1f; 二、Python 在 GeoICT 中的關鍵應用領域 1. 空間數據處理&#xff08;GIS 基礎&#xff09; 2. 遙感圖像處理與解譯 3. 空間分析與建模 4. 地學數據可視化 5. 時空大數據分析 三、Python GeoI…

OpenAI 發布了 GPT-5,有哪些新特性值得關注?國內怎么使用GPT5?

GPT-5很強&#xff0c;在LMAreana上獲得了1481分&#xff0c;超過Gemini 2.5 Pro&#xff0c;奪回第一。 國內怎么使用GPT5&#xff1f;-> zhangfeidezhu.com/?p1033 這次發布的GPT-5系列包含三個模型&#xff1a; GPT-5&#xff1a;適合復雜推理、廣泛的世界知識&#x…

PowerPoint和WPS演示放映PPT時如何禁止鼠標翻頁

在演示播放PPT的時候&#xff0c;我們有時候會用鼠標在幻燈片上劃重點&#xff0c;一不小心就點擊了鼠標左鍵&#xff0c;而默認的鼠標左鍵是向下翻頁&#xff08;下一步&#xff09;。可以簡單設置一下&#xff0c;禁用鼠標翻頁的功能&#xff0c;改為其他方式翻頁。一、禁用/…

基于springboot養老院管理系統 畢業論文+項目源碼及數據庫文件

&#xff01;&#xff01;&#xff01; 有需要的小伙伴可以通過文章末尾名片咨詢我哦&#xff01;&#xff01;&#xff01; &#x1f495;&#x1f495;作者&#xff1a;優創學社 &#x1f495;&#x1f495;個人簡介&#xff1a;本人在讀博士研究生&#xff0c;擁有多年程序開…

Meteodyn WT 6.7(Meteodyn)風力資源評估及微觀選址軟件工具

Meteodyn WT 6.7&#xff08;Meteodyn&#xff09;風力資源評估及微觀選址軟件工具&#xff0c;基于計算流體力學&#xff08;CFD&#xff09;技術&#xff0c;主要用于復雜地形下的風能評估和風電場選址。該軟件由法國政府環境與能源署&#xff08;ADEME&#xff09;支持開發&…

計算機網絡 TCP time_wait 狀態 詳解

TCP 的 TIME_WAIT 狀態是 TCP 連接終止過程中 主動關閉連接的一方&#xff08;通常是先調用 close() 或主動發送 FIN 的一端&#xff09;進入的一個重要狀態。理解其原理、副作用和優化策略對高性能網絡編程和服務器調優至關重要。&#x1f50d; 一、TIME_WAIT 是什么&#xff…

《GuardHFL: Privacy Guardian for Heterogeneous Federated Learning》——論文閱讀

研究背景&#xff1a;異構聯邦中各客戶端模型結構&#xff0c;精度&#xff0c;算力都不同&#xff0c;無法像傳統聯邦那樣共享梯度&#xff0c;只能通過“查詢-響應”使用輔助數據來訓練模型。這種方法存在嚴重隱私問題&#xff1a;直接共享查詢樣本會泄露敏感信息&#xff0c…