python-選擇排序

選擇排序是一種簡單直觀的排序算法,它的基本思想是每一輪選擇未排序部分的最小元素,然后將其放到已排序部分的末尾。這個過程持續進行,直到整個數組排序完成。(重點:通過位置找元素)

以下是選擇排序的詳細步驟和 Python 實現:
在這里插入圖片描述

選擇排序 包括以下幾個關鍵步驟:

  1. 初始狀態: 將整個數組劃分為已排序部分和未排序部分。初始時,已排序部分為空,未排序部分包含整個數組。

  2. 選擇最小元素: 在未排序部分中找到最小的元素,并記錄其索引。遍歷未排序部分的元素,找到其中最小的元素。

  3. 交換位置: 將最小元素與未排序部分的第一個元素交換位置。通過交換,將最小元素放到已排序部分的末尾,同時將未排序部分的起始位置向右移動一個元素。

  4. 迭代: 重復執行步驟 2 和步驟 3,直到未排序部分為空。每一輪迭代都會選擇未排序部分的最小元素,將其放到已排序部分的末尾。

  5. 排序完成: 當未排序部分為空時,整個數組排序完成。已排序部分包含整個數組,按順序排列。

以下是選擇排序的要點總結:

  • 不穩定性: 選擇排序是一種不穩定的排序算法,相等元素的相對位置可能會改變。

  • 時間復雜度: 選擇排序的時間復雜度為 O(n^2),其中 n 是數組的長度。這是因為每一輪都需要在未排序部分找到最小元素,而總共有 n-1 輪。

  • 空間復雜度: 選擇排序的空間復雜度為 O(1),因為它只需要常數級的額外空間用于記錄最小元素的索引。

  • 簡單實現: 選擇排序的實現相對簡單,適用于對規模較小的數據集進行排序。然而,在大規模數據集上,性能相對較差,更高效的排序算法如快速排序和歸并排序通常更為合適。

Python 實現選擇排序:

def selection_sort(arr):n = len(arr)# 遍歷整個數組for i in range(n):# 假設當前位置的元素為最小值min_index = i# 在未排序部分找到最小元素的索引for j in range(i + 1, n):if arr[j] < arr[min_index]:min_index = j# 將最小元素與未排序部分的第一個元素交換位置arr[i], arr[min_index] = arr[min_index], arr[i]# 示例
arr = [64, 25, 12, 22, 11]
selection_sort(arr)
print("排序后的數組:", arr)

在這個示例中,selection_sort 函數實現了選擇排序算法。它通過兩層嵌套的循環,在每一輪外層循環中選擇未排序部分的最小元素,并將其放到已排序部分的末尾。最后,輸出排序后的數組。

個人示例:

"""選擇排序  位置來找元素"""
sortList = [2,1,5,3,5,6,8]
for i in range(0,len(sortList)-1):"""通過定義一個變量index 來記錄 此時需排序的位置"""index=ifor j in range(i+1,len(sortList)):  #if sortList[index] > sortList[j]:# 代碼塊內容index=j"""循環結束 讓最小的元素與相應位置上的元素進行交換"""sortList[index],sortList[i]=sortList[i],sortList[index]
print(sortList)

這段代碼實現了選擇排序的算法。以下是關鍵點的介紹:

外層循環 (for i in range(0, len(sortList) - 1)): 這是選擇排序的外層循環,負責遍歷整個數組。i 表示已排序部分的末尾位置,初始時為 0。

內層循環 (for j in range(i + 1, len(sortList))): 這是選擇排序的內層循環,在未排序部分中查找最小元素。j 表示未排序部分的當前位置。對于 for j in range(i+1, len(sortList)) 中的 len(sortList),這表示整個數組的長度,而不是 len(sortList-1)。在編程中,數組的索引是從0開始的,所以數組的最后一個元素的索引是 len(sortList) - 1,而不是 len(sortList)。因此,在排序算法中,通常使用 len(sortList) 來表示數組的長度。在具體的排序算法中,for j in range(i+1, len(sortList)) 的目的是遍歷數組中從索引 i+1 到數組末尾的所有元素,這正是未排序部分的元素。由于 Python 中 range 函數是左閉右開區間,所以 range(i+1, len(sortList)) 會遍歷從 i+1 到 len(sortList)-1 的索引。
如果使用 len(sortList-1),則會導致遍歷的結束位置是 len(sortList-1)-1,這與我們的預期不符,因為我們希望遍歷到數組的最后一個元素。因此,正確的寫法是使用 len(sortList)。

查找最小元素: 通過比較 sortList[index] 和 sortList[j] 的大小,如果找到更小的元素,更新 index。

交換位置 (sortList[index], sortList[i] = sortList[i], sortList[index]): 內層循環結束后,將找到的最小元素與已排序部分的末尾元素進行交換。

循環結束后輸出排序后的數組 (print(sortList)): 外層循環執行完成后,整個數組就完成了排序。

總體來說,選擇排序的核心思想是在未排序部分中選擇最小的元素,然后與已排序部分的末尾元素交換,逐步完成排序。
在這里插入圖片描述

選擇排序的時間復雜度為 O(n^2),空間復雜度為 O(1)。盡管選擇排序的性能相對較差,但它的實現簡單,適用于較小規模的數據集。

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

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

相關文章

HarmonyOS應用開發實戰—登錄頁面【ArkTS】

文章目錄 本頁面實戰效果預覽圖一.HarmonyOS應用開發1.1HarmonyOS 詳解1.2 ArkTS詳解二.HarmonyOS應用開發實戰—登錄頁面【ArkTS】2.1 ArkTS頁面源碼2.2 代碼解析2.3 心得本頁面實戰效果預覽圖 一.HarmonyOS應用開發 1.1HarmonyOS 詳解 HarmonyOS(鴻蒙操作系統)是華為公司…

小程序首頁白屏優化,并舉例說明

小程序首頁白屏優化 小程序首頁白屏優化是指在用戶進入小程序首頁時&#xff0c;能夠盡快展示內容&#xff0c;避免出現長時間的白屏加載狀態&#xff0c;提升用戶體驗。以下是一些常見的小程序首頁白屏優化方法&#xff1a; 減少首屏請求&#xff1a;盡量減少首頁需要請求的資…

js粒子效果(一)

效果: 代碼: <!doctype html> <html> <head><meta charset"utf-8"><title>HTML5鼠標經過粒子散開動畫特效</title><style>html, body {position: absolute;overflow: hidden;margin: 0;padding: 0;width: 100%;height: 1…

DELL MD3600F存儲重置管理軟件密碼

注意&#xff1a;密碼清除可能會導致業務秒斷&#xff0c;建議非業務時間操作 針對一臺控制器操作即可&#xff0c;另一控制器會同步操作 重置后密碼為空&#xff01; 需求&#xff1a;重置存儲管理軟件密碼 管理軟件中分配物理磁盤時提示輸入密碼(類似是否了解風險確認操作的提…

華為OD機試 - 二叉樹計算(Java JS Python C)

目錄 題目描述 輸入描述 輸出描述 用例 題目解析 JS算法源碼 Java算法源碼

io.lettuce.core.RedisCommandExecutionException

io.lettuce.core.RedisCommandExecutionException: ERR invalid password ERR invalid password-CSDN博客 io.lettuce.core.RedisCommandExecutionException /** Copyright 2011-2022 the original author or authors.** Licensed under the Apache License, Version 2.0 (the…

Rust UI開發(一):使用iced構建UI時,如何在界面顯示中文字符

注&#xff1a;此文適合于對rust有一些了解的朋友 iced是一個跨平臺的GUI庫&#xff0c;用于為rust語言程序構建UI界面。 iced的基本邏輯是&#xff1a; UI交互產生消息message&#xff0c;message傳遞給后臺的update&#xff0c;在這個函數中編寫邏輯&#xff0c;然后通過…

2023-11-24--oracle--實驗--[Merge 語句]

oracle--實驗---Merge語句 1.認知Merge 語句 ? merge 語句是 sql 語句的一種。在 SQL server 、 Oracle 數據庫中可用&#xff0c; MySQL 中不可用。 ? merge 用來合并 update 和 insert 語句。目的&#xff1a;通過 merge 語句&#xff0c;根據一張表&#xff08; 原數據表…

IOS免簽封裝打包蘋果APP的方法

IOS免簽app封裝打包蘋果APP的方法如下&#xff1a; 準備一個未簽名的IPA文件。獲取一個企業證書或個人證書&#xff0c;用于簽名IPA文件。將證書添加到Keychain Access中。安裝iOS App Signer&#xff08;可以在網上找到相關下載鏈接&#xff09;。打開iOS App Signer&#xf…

AT360-6T GNSS 單頻高精度授時模塊特性參數

AT360-6T 模塊具有高靈敏度、低功耗、低cost等優勢&#xff0c;可以滿足電力授時&#xff0c;通信授時等領域的應用。AT360-6T特點&#xff1a; 1.支持北斗二代/北斗三代信號 2.高精度授時 3.可靠性授時 實時高精度授時 AT360-6T 系列模塊的授時秒脈沖抖動可以達到 10ns&am…

Vue學習筆記-搭建Vuex

1.概念 在Vue實現集中式狀態&#xff08;數據&#xff09;管理的一個插件&#xff0c;對Vue中多個組件的共享狀態進行集中式的管理&#xff08;讀/寫&#xff09;&#xff0c;也是一種組件間的通信方式&#xff0c;適用于任意組件間的通信 2.使用場景 多個組件需要共享數據時…

Mysql存儲引擎分類

Mysql存儲引擎分類&#xff1a; 在選擇存儲引擎時&#xff0c;應該根據應用系統的特點選擇合適的存儲引擎。對于復雜的應用系統&#xff0c;還可以根據實際情況選擇多種存儲引擎進行組合。 InnoDB: 是Mysql的默認存儲引擎&#xff0c;支持事務、外鍵。如果應用對事務的完整性有…

杰發科技AC7801——ADC軟件觸發的簡單使用

前言 7801資料讀起來不是很好理解&#xff0c;大概率是之前MTK的大佬寫的。在此以簡單的方式進行描述。我們做一個簡單的規則組軟件觸發Demo。因為規則組通道只有一個數據寄存器&#xff0c;因此還需要用上DMA方式搬運數據到內存。 AC7801的ADC簡介 7801的ADC是一種 12 位 逐…

一文學會qml自定義組件

文章目錄 最簡單的自定義控件:自定義按鈕組件添加自定義信號在QML中,自定義組件通常是通過創建一個新的QML文件來實現的,這個文件定義了組件的屬性、信號、槽以及界面。你可以將這個組件看作是一個可重用的模塊,它可以在不同的QML場景中使用,而不需要重復編寫代碼。 以下…

洛谷P1157組合的輸出 遞歸:我他又來辣

沒沒沒沒沒沒沒錯&#xff0c;這是一道簡單的遞歸&#xff08;其實是深搜加回溯) 我不管&#xff0c;我說是遞歸就是遞歸。 上題干&#xff1a; 題目描述 排列與組合是常用的數學方法&#xff0c;其中組合就是從 n 個元素中抽出 r個元素&#xff08;不分順序且 r≤n&#x…

查swap內存使用

查詢linux的swap被什么使用了 查詢centos的swap被什么進程使用了 swap內存被什么程序占用&#xff0c;什么程序使用了swap分區&#xff0c;占用swap內存的進程 查系統使用swap內存前10個進程&#xff1a; for i in $( cd /proc;ls |grep "^[0-9]"|awk $0 >10…

大數據技術之數據安全與網絡安全——CMS靶場實訓

大數據技術之數據安全與網絡安全——CMS靶場實訓 在當今數字化時代&#xff0c;大數據技術的迅猛發展帶來了前所未有的數據增長&#xff0c;同時也催生了對數據安全和網絡安全的更為迫切的需求。本篇博客將聚焦于大數據技術背景下的數據安全與網絡安全&#xff0c;并通過CMS&a…

C語言-指針講解(3)

文章目錄 1.字符指針變量1.1 字符指針變量類型是什么1.2字符指針變量的兩種使用方法&#xff1a;1.3字符指針筆試題講解1.3.1 代碼解剖 2.數組指針變量2.1 什么是數組指針2.2 數組指針變量是什么&#xff1f;2.2.3 數組指針變量的舉例 2.3數組指針和指針數組的區別是什么&#…

npm ERR! node-sass@4.13.0 postinstall: `node scripts/build.js`

npm ERR! node-sass4.13.0 postinstall: node scripts/build.js npm config set sass_binary_sitehttps://npm.taobao.org/mirrors/node-sass npm install npm run dev Microsoft Windows [版本 10.0.19045.2965] (c) Microsoft Corporation。保留所有權利。C:\Users\Administr…

4.操作系統常見面試題(2)

3.4 虛擬內存 直接使?物理內存會產??些問題 1. 內存空間利?率的問題&#xff1a;各個進程對內存的使?會導致內存碎?化&#xff0c;當要? malloc 分配?塊很?的內存空間時&#xff0c;可能會出現雖然有?夠多的空閑物理內存&#xff0c;卻沒有?夠?的連續空閑內存這種…