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

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

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

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

選擇排序(Selection Sort)是一種簡單但有效的排序算法。它的基本思想是每次從待排序的元素中選擇最?。ɑ蜃畲螅┑脑兀⑵浞胖迷谝雅判蛐蛄械哪┪?。通過多次選擇和交換操作,逐步將序列排序。本文將詳細介紹選擇排序算法的原理和實現,并提供相關的Python代碼示例。fHZ28資訊網——每日最新資訊28at.com

fHZ28資訊網——每日最新資訊28at.com

一、算法原理

選擇排序算法的步驟如下:fHZ28資訊網——每日最新資訊28at.com

  • 遍歷待排序序列,將第一個元素視為當前最?。ɑ蜃畲螅┰亍?/li>
  • 在剩余的待排序序列中,找到最?。ɑ蜃畲螅┑脑?,將其與當前位置交換。
  • 排除已排序的元素,重復步驟2,直到所有元素都被排序。

選擇排序的核心思想是通過多次選擇最?。ɑ蜃畲螅┰?,逐步將序列排序。fHZ28資訊網——每日最新資訊28at.com

二、選擇排序的實現

下面是使用Python實現選擇排序算法的代碼:fHZ28資訊網——每日最新資訊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()函數接受一個待排序的列表作為輸入,并對列表進行選擇排序。算法使用兩個嵌套的循環。外部循環從第一個元素遍歷到倒數第二個元素,內部循環從外部循環的下一個位置遍歷到列表末尾,尋找最小元素的索引。然后通過交換操作,將最小元素放置在當前位置上。fHZ28資訊網——每日最新資訊28at.com

三、算法分析

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

四、優化思路

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

優化1:減少交換次數

在內部循環中,我們每次找到最小元素后都會進行一次交換操作。實際上,我們可以在內部循環結束后再進行一次交換操作,將最小元素放置在正確的位置上。fHZ28資訊網——每日最新資訊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]

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

優化2:使用雙指針

在內部循環中,我們每次都要查找剩余部分中的最小元素的索引??梢允褂秒p指針的方式,同時記錄最小元素的索引和最大元素的索引,然后進行交換。fHZ28資訊網——每日最新資訊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

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

五、總結

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

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

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

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

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

標簽:
  • 熱門焦點
  • vivo TWS Air開箱體驗:真輕 臻好聽

    在vivo S15系列新機的發布會上,vivo的最新款真無線藍牙耳機vivo TWS Air也一同發布,本次就這款耳機新品給大家帶來一個簡單的分享。外包裝盒上,vivo TWS Air保持了vivo自家產
  • 7月安卓手機好評榜:三星S23Ultra好評率第一

    性能榜和性價比榜之后,我們來看最后的安卓手機好評榜,數據來源安兔兔評測,收集時間2023年7月1日至7月31日,僅限國內市場。第一名:三星Galaxy S23 Ultra好評率:95.71%在即將迎來新
  • K8S | Service服務發現

    一、背景在微服務架構中,這里以開發環境「Dev」為基礎來描述,在K8S集群中通常會開放:路由網關、注冊中心、配置中心等相關服務,可以被集群外部訪問;圖片對于測試「Tes」環境或者
  • 得物效率前端微應用推進過程與思考

    一、背景效率工程隨著業務的發展,組織規模的擴大,越來越多的企業開始意識到協作效率對于企業團隊的重要性,甚至是決定其在某個行業競爭中突圍的關鍵,是企業長久生存的根本。得物
  • 微信語音大揭秘:為什么禁止轉發?

    大家好,我是你們的小米。今天,我要和大家聊一個有趣的話題:為什么微信語音不可以轉發?這是一個我們經常在日常使用中遇到的問題,也是一個讓很多人好奇的問題。讓我們一起來揭開這
  • 只需五步,使用start.spring.io快速入門Spring編程

    步驟1打開https://start.spring.io/,按照屏幕截圖中的內容創建項目,添加 Spring Web 依賴項,并單擊“生成”按鈕下載 .zip 文件,為下一步做準備。請在進入步驟2之前進行解壓。圖
  • 電視息屏休眠仍有網絡上傳 愛奇藝被質疑“薅消費者羊毛”

    記者丨寧曉敏 見習生丨汗青出品丨鰲頭財經(theSankei) 前不久,愛奇藝發布了一份亮眼的一季報,不僅營收和會員營收創造歷史最佳表現,其運營利潤也連續6個月實現增長。自去年年初
  • 微博大門常打開,迎接海外畫師漂洋東渡

    作者:互聯網那些事&ldquo;起猛了,我能看得懂日語了&rdquo;。&ldquo;為什么日本人說話我能聽懂?&rdquo;&ldquo;中文不像中文,日語不像日語,但是我竟然看懂了&rdquo;&hellip;&hell
  • “買真退假” 這種“羊毛”不能薅

    □ 法治日報 記者 王春   □ 本報通訊員 胡佳麗  2020年初,還在上大學的小東加入了一個大學生兼職QQ群。群主&ldquo;七王&rdquo;在群里介紹一些刷單賺
Top 主站蜘蛛池模板: 巫溪县| 永修县| 乐都县| 阳信县| 浮山县| 涞水县| 开阳县| 陆良县| 沂水县| 长寿区| 信阳市| 柏乡县| 天镇县| 九龙县| 长乐市| 阿拉善右旗| 江源县| 万山特区| 合江县| 武强县| 星子县| 江永县| 新平| 澳门| 永和县| 大关县| 承德县| 偏关县| 延津县| 平果县| 韶关市| 镇康县| 乐平市| 华安县| 克山县| 屯门区| 重庆市| 淅川县| 东港市| 炉霍县| 镇安县|