国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

用Python實(shí)現(xiàn)插入排序和選擇排序

shiina / 1107人閱讀

摘要:具體實(shí)現(xiàn)步驟為首先我們把整個(gè)數(shù)組拆分為有序區(qū)間和未排序區(qū)間,有序區(qū)間在插入排序一開始只有一個(gè)元素,就是數(shù)組的第一個(gè)元素。


這篇是我關(guān)于用Python實(shí)現(xiàn)50個(gè)經(jīng)典算法代碼的第一篇文章,主要目的是在自己手寫一遍算法之后,在文章中對(duì)算法的細(xì)節(jié)進(jìn)行總結(jié)來加以鞏固。

話不多說,讓我們從最基本的排序算法開始吧

插入排序

如下圖所示,插入排序的實(shí)現(xiàn)思路顧名思義,就是不斷地在一個(gè)已經(jīng)是有序的數(shù)組中,尋找合適位置并插入新元素

具體實(shí)現(xiàn)步驟為:

首先我們把整個(gè)數(shù)組拆分為有序區(qū)間和未排序區(qū)間,有序區(qū)間在插入排序一開始只有一個(gè)元素,就是數(shù)組的第一個(gè)元素。

接在有序區(qū)間之后的一個(gè)元素就是準(zhǔn)備插入的元素,在圖中就是標(biāo)為綠色的元素,在有序區(qū)間內(nèi)尋找位置并插入。

其尋找邏輯為:從后往前依次進(jìn)行比較,如果待插入元素大于當(dāng)前元素,則將待插入元素插入到當(dāng)前元素的后一位,如果待插入元素小于當(dāng)前元素,則將當(dāng)前元素后移一位。不斷重復(fù)該過程直至到數(shù)組的最后一位

其實(shí)現(xiàn)的具體代碼為:

def insertion_sort(a):
    length = len(a)
    if length <=1:
        return 
    for i in range(1,length):
        j = i-1
        value = a[i]
        while j >=0:
            if a[j]

時(shí)間復(fù)雜計(jì)算為:我們需要將整個(gè)數(shù)組遍歷一遍,所以這一部分為O(n),在每一次遍歷中都要執(zhí)行一次插入操作,其時(shí)間復(fù)雜度為O(n),所以總時(shí)間復(fù)雜度為O(n2)

選擇排序

選擇排序跟插入排序算法類似,都是將數(shù)組分為有序區(qū)間和未排序區(qū)間,區(qū)別在于插入排序是將一個(gè)新元素插入到有序區(qū)間內(nèi),而選擇排序則是在未排序區(qū)間中找到最小元素,并交換到有序區(qū)間之后。

實(shí)現(xiàn)代碼為:

def selection_sort(a):
    length = len(a)
    if length <=1:
        return
    for i in range(0,length-1):
        min_value = a[i]
        min_index = i
        j = i+1
        while j

時(shí)間復(fù)雜度計(jì)算:數(shù)組長(zhǎng)度為n,一共需要尋找n次最小值,每次尋找最小值都要遍歷未排序區(qū)間一次,其時(shí)間復(fù)雜度為O(n),乘以n次為O(n2)

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/43779.html

相關(guān)文章

  • 【算法日積月累】1-選擇排序

    摘要:選擇排序算法實(shí)現(xiàn)實(shí)現(xiàn)選擇排序,記錄最小元素的索引,最后才交換位置說明交換兩個(gè)數(shù)組中的元素,在中有更簡(jiǎn)單的寫法,這是的語法糖,其它語言中是沒有的。和語言中比較器的實(shí)現(xiàn)前面我們說到了,我們?yōu)榱送怀雠判蛩惴ǖ乃枷耄瑢⑺械睦觾H限在數(shù)組排序中。 showImg(https://segmentfault.com/img/remote/1460000017909538?w=1949&h=1080...

    neuSnail 評(píng)論0 收藏0
  • Github標(biāo)星2w+,熱榜第一,如何Python實(shí)現(xiàn)所有算法

    摘要:歸并排序歸并排序,或,是創(chuàng)建在歸并操作上的一種有效的排序算法,效率為大符號(hào)。以此類推,直到所有元素均排序完畢。與快速排序一樣都由托尼霍爾提出的,因而也被稱為霍爾選擇算法。 showImg(https://segmentfault.com/img/remote/1460000019096360);編譯:周素云、蔣寶尚 學(xué)會(huì)了Python基礎(chǔ)知識(shí),想進(jìn)階一下,那就來點(diǎn)算法吧!畢竟編程語言只...

    zxhaaa 評(píng)論0 收藏0
  • 基本排序算法的Python實(shí)現(xiàn)

    摘要:本篇主要實(shí)現(xiàn)九八大排序算法,分別是冒泡排序,插入排序,選擇排序,希爾排序,歸并排序,快速排序,堆排序計(jì)數(shù)排序。希爾排序是非穩(wěn)定排序算法。歸并排序算法依賴歸并操作。但是,計(jì)數(shù)排序可以用在基數(shù)排序算法中,能夠更有效的排序數(shù)據(jù)范圍很大的數(shù)組。 本篇主要實(shí)現(xiàn)九(八)大排序算法,分別是冒泡排序,插入排序,選擇排序,希爾排序,歸并排序,快速排序,堆排序,計(jì)數(shù)排序。希望大家回顧知識(shí)的時(shí)候也能從我的這...

    zhangqh 評(píng)論0 收藏0
  • python-八大算法

    摘要:排序算法總結(jié)排序算法平均時(shí)間復(fù)雜度冒泡排序選擇排序插入排序希爾排序快速排序歸并排序堆排序基數(shù)排序一冒泡排序基本思想兩個(gè)數(shù)比較大小,較大的數(shù)下沉,較小的數(shù)冒起來。 排序算法總結(jié) 排序算法 平均時(shí)間復(fù)雜度 冒泡排序O(n2) 選擇排序O(n2) 插入排序O(n2) 希爾排序O(n1.5) 快速排序O(N*logN) 歸并排序O(N*logN) 堆排序O(N*logN) 基數(shù)排序O(d(n+...

    aboutU 評(píng)論0 收藏0
  • 前端面試必備——十大經(jīng)典排序算法

    摘要:冒泡排序冒泡排序也是一種簡(jiǎn)單直觀的排序算法。但希爾排序是非穩(wěn)定排序算法。快速排序又是一種分而治之思想在排序算法上的典型應(yīng)用。本質(zhì)上來看,快速排序應(yīng)該算是在冒泡排序基礎(chǔ)上的遞歸分治法。 冒泡排序 冒泡排序(Bubble Sort)也是一種簡(jiǎn)單直觀的排序算法。它重復(fù)地走訪過要排序的數(shù)列,一次比較兩個(gè)元素,如果他們的順序錯(cuò)誤就把他們交換過來。走訪數(shù)列的工作是重復(fù)地進(jìn)行直到?jīng)]有再需要交換,也就...

    RebeccaZhong 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<