日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

Python選擇排序:簡單而高效的排序算法解析!

來源: 責編: 時間:2023-09-28 10:08:26 322觀看
導讀選擇排序(Selection Sort)是一種簡單但有效的排序算法。它的基本思想是每次從待排序的元素中選擇最小(或最大)的元素,并將其放置在已排序序列的末尾。通過多次選擇和交換操作,逐步將序列排序。本文將詳細介紹選擇排序算法的

選擇排序(Selection Sort)是一種簡單但有效的排序算法。它的基本思想是每次從待排序的元素中選擇最小(或最大)的元素,并將其放置在已排序序列的末尾。通過多次選擇和交換操作,逐步將序列排序。本文將詳細介紹選擇排序算法的原理和實現(xiàn),并提供相關的Python代碼示例。Hg928資訊網(wǎng)——每日最新資訊28at.com

Hg928資訊網(wǎng)——每日最新資訊28at.com

一、算法原理

選擇排序算法的步驟如下:Hg928資訊網(wǎng)——每日最新資訊28at.com

  • 遍歷待排序序列,將第一個元素視為當前最小(或最大)元素。
  • 在剩余的待排序序列中,找到最小(或最大)的元素,將其與當前位置交換。
  • 排除已排序的元素,重復步驟2,直到所有元素都被排序。

選擇排序的核心思想是通過多次選擇最小(或最大)元素,逐步將序列排序。Hg928資訊網(wǎng)——每日最新資訊28at.com

二、選擇排序的實現(xiàn)

下面是使用Python實現(xiàn)選擇排序算法的代碼:Hg928資訊網(wǎng)——每日最新資訊28at.com

def selection_sort(arr):    n = len(arr)    for i in range(n - 1):        # 假設當前位置的元素為最小值        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]        # 測試代碼numbers = [4, 2, 6, 1, 3]selection_sort(numbers)print(numbers)  # 輸出:[1, 2, 3, 4, 6]

在上述代碼中,selection_sort()函數(shù)接受一個待排序的列表作為輸入,并對列表進行選擇排序。算法使用兩個嵌套的循環(huán)。外部循環(huán)從第一個元素遍歷到倒數(shù)第二個元素,內部循環(huán)從外部循環(huán)的下一個位置遍歷到列表末尾,尋找最小元素的索引。然后通過交換操作,將最小元素放置在當前位置上。Hg928資訊網(wǎng)——每日最新資訊28at.com

三、算法分析

選擇排序是一種原址排序算法,即在排序過程中直接修改原始列表,不需要額外的存儲空間。選擇排序的時間復雜度為O(n^2),其中n是待排序序列的長度。雖然選擇排序的時間復雜度較高,但在小規(guī)模數(shù)據(jù)或部分有序的數(shù)據(jù)集上,其性能仍然可以接受。 選擇排序是一種不穩(wěn)定的排序算法,即相等元素的相對順序可能會發(fā)生改變。例如,對于序列[2, 2, 1],經(jīng)過選擇排序后,第一個2會被移到第二個2的后面。Hg928資訊網(wǎng)——每日最新資訊28at.com

四、優(yōu)化思路

盡管選擇排序的時間復雜度較高,但可以通過一些優(yōu)化思路提升算法性能。Hg928資訊網(wǎng)——每日最新資訊28at.com

優(yōu)化1:減少交換次數(shù)

在內部循環(huán)中,我們每次找到最小元素后都會進行一次交換操作。實際上,我們可以在內部循環(huán)結束后再進行一次交換操作,將最小元素放置在正確的位置上。Hg928資訊網(wǎng)——每日最新資訊28at.com

def selection_sort(arr):    n = len(arr)    for i in range(n - 1):        # 假設當前位置的元素為最小值        min_index = i        for j in range(i + 1, n):            # 在剩余部分中尋找最小值的索引            if arr[j] < arr[min_index]:                min_index = j                # 將當前位置的元素與最小值進行交換        if min_index != i:            arr[i], arr[min_index] = arr[min_index], arr[i]

這樣可以減少交換的次數(shù),但并不會改變算法的時間復雜度。Hg928資訊網(wǎng)——每日最新資訊28at.com

優(yōu)化2:使用雙指針

在內部循環(huán)中,我們每次都要查找剩余部分中的最小元素的索引。可以使用雙指針的方式,同時記錄最小元素的索引和最大元素的索引,然后進行交換。Hg928資訊網(wǎng)——每日最新資訊28at.com

def selection_sort(arr):    n = len(arr)    left = 0    right = n - 1    while left < right:        # 假設當前位置的元素為最小值和最大值        min_index = left        max_index = right        for i in range(left, right + 1):            # 在剩余部分中尋找最小值和最大值的索引            if arr[i] < arr[min_index]:                min_index = i            if arr[i] > arr[max_index]:                max_index = i                # 將當前位置的元素與最小值進行交換        if min_index != left:            arr[left], arr[min_index] = arr[min_index], arr[left]        if max_index == left:            max_index = min_index            # 將當前位置的元素與最大值進行交換        if max_index != right:            arr[right], arr[max_index] = arr[max_index], arr[right]        left += 1        right -= 1

這種優(yōu)化方式可以同時找到最小元素和最大元素的索引,并進行相應的交換操作。在一次循環(huán)中,我們可以找到最小元素并將其放置在正確的位置上,同時找到最大元素并將其放置在正確的位置上。這樣可以減少比較的次數(shù)。Hg928資訊網(wǎng)——每日最新資訊28at.com

五、總結

選擇排序是一種簡單但有效的排序算法。它的基本思想是每次選擇最小(或最大)的元素,并將其放置在已排序序列的末尾,通過多次選擇和交換操作,逐步將序列排序。本文介紹了選擇排序算法的原理和實現(xiàn),并提供了相關的Python代碼示例。選擇排序的時間復雜度為O(n^2),在小規(guī)模數(shù)據(jù)或部分有序的數(shù)據(jù)集上,其性能可以接受。此外,我們還介紹了一些優(yōu)化思路,如減少交換次數(shù)和使用雙指針,以提升算法的性能。掌握選擇排序的實現(xiàn)和優(yōu)化思路對于理解和應用其他排序算法也是很有幫助的。Hg928資訊網(wǎng)——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-11862-0.htmlPython選擇排序:簡單而高效的排序算法解析!

聲明:本網(wǎng)頁內容旨在傳播知識,若有侵權等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: Python條件語句和循環(huán)結構從入門到精通

下一篇: 十道Java限流器面試題和答案

標簽:
  • 熱門焦點
  • 2023 年的 Node.js 生態(tài)系統(tǒng)

    隨著技術的不斷演進和創(chuàng)新,Node.js 在 2023 年達到了一個新的高度。Node.js 擁有一個龐大的生態(tài)系統(tǒng),可以幫助開發(fā)人員更快地實現(xiàn)復雜的應用。本文就來看看 Node.js 最新的生
  • 不容錯過的MSBuild技巧,必備用法詳解和實踐指南

    一、MSBuild簡介MSBuild是一種基于XML的構建引擎,用于在.NET Framework和.NET Core應用程序中自動化構建過程。它是Visual Studio的構建引擎,可在命令行或其他構建工具中使用
  • 多線程開發(fā)帶來的問題與解決方法

    使用多線程主要會帶來以下幾個問題:(一)線程安全問題  線程安全問題指的是在某一線程從開始訪問到結束訪問某一數(shù)據(jù)期間,該數(shù)據(jù)被其他的線程所修改,那么對于當前線程而言,該線程
  • 一個注解實現(xiàn)接口冪等,這樣才優(yōu)雅!

    場景碼猿慢病云管理系統(tǒng)中其實高并發(fā)的場景不是很多,沒有必要每個接口都去考慮并發(fā)高的場景,比如添加住院患者的這個接口,具體的業(yè)務代碼就不貼了,業(yè)務偽代碼如下:圖片上述代碼有
  • 2天漲粉255萬,又一賽道在抖音爆火

    來源:運營研究社作者 | 張知白編輯 | 楊佩汶設計 | 晏談夢潔這個暑期,旅游賽道徹底火了:有的「地方」火了&mdash;&mdash;貴州村超旅游收入 1 個月超過 12 億;有的「博主」火了&m
  • 中國家電海外掘金正當時|出海專題

    作者|吳南南編輯|胡展嘉運營|陳佳慧出品|零態(tài)LT(ID:LingTai_LT)2023年,出海市場戰(zhàn)況空前,中國創(chuàng)業(yè)者在海外紛紛摩拳擦掌,以期能夠把中國的商業(yè)模式、創(chuàng)業(yè)理念、戰(zhàn)略打法輸出海外,他們依
  • 三星獲批量產(chǎn)iPhone 15全系屏幕:蘋果史上最驚艷直屏

    按照慣例,蘋果將繼續(xù)在今年9月舉辦一年一度的秋季新品發(fā)布會,有傳言稱發(fā)布會將于9月12日舉行,屆時全新的iPhone 15系列將正式與大家見面,不出意外的話
  • 首發(fā)天璣9200+ iQOO Neo8系列發(fā)布首銷售價2299元起

    2023年5月23日晚,iQOO Neo8系列正式發(fā)布。其中,Neo系列首款Pro之作——iQOO Neo8 Pro強悍登場,限時售價3099元起;價位段最強性能手機iQOO Neo8同期上市
  • 回歸OPPO兩年,一加贏了銷量,輸了品牌

    成為OPPO旗下主打性能的先鋒品牌后,一加屢創(chuàng)佳績。今年618期間,一加手機全渠道銷量同比增長362%,憑借一加 11、一加 Ace 2、一加 Ace 2V三款爆品,一加
Top 主站蜘蛛池模板: 南丹县| 麻栗坡县| 贡嘎县| 耒阳市| 巨野县| 商洛市| 涪陵区| 嘉祥县| 阿坝县| 修武县| 炉霍县| 多伦县| 乌兰察布市| 安徽省| 尖扎县| 平山县| 宿迁市| 常山县| 临沭县| 赣榆县| 金门县| 嵊泗县| 汾阳市| 梁山县| 青河县| 乌什县| 越西县| 塔河县| 文化| 拉萨市| 巴林右旗| 文山县| 宝丰县| 河西区| 西藏| 金湖县| 马龙县| 永宁县| 喀喇沁旗| 萍乡市| 阳西县|