最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python中選擇排序的實(shí)現(xiàn)與優(yōu)化

 更新時(shí)間:2023年06月28日 10:29:30   作者:ziwu  
選擇排序(Selection?Sort)是一種簡(jiǎn)單但有效的排序算法,本文將詳細(xì)介紹選擇排序算法的原理和實(shí)現(xiàn),并提供相關(guān)的Python代碼示例,需要的可以參考一下

選擇排序(Selection Sort)是一種簡(jiǎn)單但有效的排序算法。它的基本思想是每次從待排序的元素中選擇最?。ɑ蜃畲螅┑脑?,并將其放置在已排序序列的末尾。通過(guò)多次選擇和交換操作,逐步將序列排序。本文將詳細(xì)介紹選擇排序算法的原理和實(shí)現(xiàn),并提供相關(guān)的Python代碼示例。

一、算法原理

選擇排序算法的步驟如下:

  • 遍歷待排序序列,將第一個(gè)元素視為當(dāng)前最?。ɑ蜃畲螅┰?。
  • 在剩余的待排序序列中,找到最?。ɑ蜃畲螅┑脑兀瑢⑵渑c當(dāng)前位置交換。
  • 排除已排序的元素,重復(fù)步驟2,直到所有元素都被排序。

選擇排序的核心思想是通過(guò)多次選擇最?。ɑ蜃畲螅┰?,逐步將序列排序。

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

下面是使用Python實(shí)現(xiàn)選擇排序算法的代碼:

def selection_sort(arr):
    n = len(arr)
    for i in range(n - 1):
        # 假設(shè)當(dāng)前位置的元素為最小值
        min_index = i
        for j in range(i + 1, n):
            # 在剩余部分中尋找最小值的索引
            if arr[j] < arr[min_index]:
                min_index = j
                # 將當(dāng)前位置的元素與最小值進(jìn)行交換
        arr[i], arr[min_index] = arr[min_index], arr[i]
        # 測(cè)試代碼
numbers = [4, 2, 6, 1, 3]
selection_sort(numbers)
print(numbers)  # 輸出:[1, 2, 3, 4, 6]

在上述代碼中,selection_sort()函數(shù)接受一個(gè)待排序的列表作為輸入,并對(duì)列表進(jìn)行選擇排序。算法使用兩個(gè)嵌套的循環(huán)。外部循環(huán)從第一個(gè)元素遍歷到倒數(shù)第二個(gè)元素,內(nèi)部循環(huán)從外部循環(huán)的下一個(gè)位置遍歷到列表末尾,尋找最小元素的索引。然后通過(guò)交換操作,將最小元素放置在當(dāng)前位置上。

三、算法分析

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

四、優(yōu)化思路

盡管選擇排序的時(shí)間復(fù)雜度較高,但可以通過(guò)一些優(yōu)化思路提升算法性能。

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

在內(nèi)部循環(huán)中,我們每次找到最小元素后都會(huì)進(jìn)行一次交換操作。實(shí)際上,我們可以在內(nèi)部循環(huán)結(jié)束后再進(jìn)行一次交換操作,將最小元素放置在正確的位置上。

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

這樣可以減少交換的次數(shù),但并不會(huì)改變算法的時(shí)間復(fù)雜度。

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

在內(nèi)部循環(huán)中,我們每次都要查找剩余部分中的最小元素的索引??梢允褂秒p指針的方式,同時(shí)記錄最小元素的索引和最大元素的索引,然后進(jìn)行交換。

def selection_sort(arr):
    n = len(arr)
    left = 0
    right = n - 1
    while left < right:
        # 假設(shè)當(dāng)前位置的元素為最小值和最大值
        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
                # 將當(dāng)前位置的元素與最小值進(jìn)行交換
        if min_index != left:
            arr[left], arr[min_index] = arr[min_index], arr[left]
        if max_index == left:
            max_index = min_index
            # 將當(dāng)前位置的元素與最大值進(jìn)行交換
        if max_index != right:
            arr[right], arr[max_index] = arr[max_index], arr[right]
        left += 1
        right -= 1

這種優(yōu)化方式可以同時(shí)找到最小元素和最大元素的索引,并進(jìn)行相應(yīng)的交換操作。在一次循環(huán)中,我們可以找到最小元素并將其放置在正確的位置上,同時(shí)找到最大元素并將其放置在正確的位置上。這樣可以減少比較的次數(shù)。

五、總結(jié)

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

到此這篇關(guān)于Python中選擇排序的實(shí)現(xiàn)與優(yōu)化的文章就介紹到這了,更多相關(guān)Python選擇排序內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Dlib+OpenCV深度學(xué)習(xí)人臉識(shí)別的方法示例

    Dlib+OpenCV深度學(xué)習(xí)人臉識(shí)別的方法示例

    這篇文章主要介紹了Dlib+OpenCV深度學(xué)習(xí)人臉識(shí)別的方法示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05
  • Jupyter Notebook折疊輸出的內(nèi)容實(shí)例

    Jupyter Notebook折疊輸出的內(nèi)容實(shí)例

    這篇文章主要介紹了Jupyter Notebook折疊輸出的內(nèi)容實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-04-04
  • 使用Python計(jì)算文件和文本的多種Hash值

    使用Python計(jì)算文件和文本的多種Hash值

    這篇文章主要為大家詳細(xì)介紹了如何使用Python計(jì)算文件和文本的多種Hash值,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2025-08-08
  • Python入門(mén)篇之編程習(xí)慣與特點(diǎn)

    Python入門(mén)篇之編程習(xí)慣與特點(diǎn)

    本文是Python入門(mén)篇的第一篇文章,主要講述了Python編程習(xí)慣和特點(diǎn)等一些基礎(chǔ)知識(shí),有需要的朋友可以參考下
    2014-10-10
  • pytorch 模擬關(guān)系擬合——回歸實(shí)例

    pytorch 模擬關(guān)系擬合——回歸實(shí)例

    今天小編就為大家分享一篇pytorch 模擬關(guān)系擬合——回歸實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-01-01
  • Python?list?append方法之給列表追加元素

    Python?list?append方法之給列表追加元素

    這篇文章主要介紹了Python?list?append方法如何給列表追加元素,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • 用Python實(shí)現(xiàn)等級(jí)劃分

    用Python實(shí)現(xiàn)等級(jí)劃分

    大家好,本篇文章主要講的是用Python實(shí)現(xiàn)等級(jí)劃分,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話記得收藏一下
    2022-02-02
  • python樹(shù)莓派紅外反射傳感器

    python樹(shù)莓派紅外反射傳感器

    這篇文章主要為大家詳細(xì)介紹了python樹(shù)莓派紅外反射傳感器,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-01-01
  • python中pycurl庫(kù)的用法實(shí)例

    python中pycurl庫(kù)的用法實(shí)例

    這篇文章主要介紹了python中pycurl庫(kù)的用法實(shí)例,可實(shí)現(xiàn)從指定網(wǎng)址讀取網(wǎng)頁(yè)的功能,需要的朋友可以參考下
    2014-09-09
  • YOLOv5車(chē)牌識(shí)別實(shí)戰(zhàn)教程(三)模型訓(xùn)練與評(píng)估

    YOLOv5車(chē)牌識(shí)別實(shí)戰(zhàn)教程(三)模型訓(xùn)練與評(píng)估

    這篇文章主要介紹了YOLOv5車(chē)牌識(shí)別實(shí)戰(zhàn)教程(三)模型訓(xùn)練與評(píng)估,在這個(gè)教程中,我們將一步步教你如何使用YOLOv5進(jìn)行車(chē)牌識(shí)別,幫助你快速掌握YOLOv5車(chē)牌識(shí)別技能,需要的朋友可以參考下
    2023-04-04

最新評(píng)論

浮山县| 息烽县| 吴堡县| 淄博市| 甘肃省| 大连市| 巴彦淖尔市| 湘潭县| 连平县| 巫溪县| 安阳市| 安徽省| 绥化市| 宝应县| 房山区| 岑溪市| 冕宁县| 炎陵县| 太湖县| 玉龙| 泸州市| 长兴县| 福海县| 马龙县| 东安县| 肃南| 东兴市| 邯郸县| 京山县| 永清县| 永新县| 东乌珠穆沁旗| 商都县| 安陆市| 山丹县| 玉山县| 石林| 资溪县| 安宁市| 沧州市| 宝清县|