国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

玩轉(zhuǎn)Python插入排序,從基礎(chǔ)到進(jìn)階

這篇具有很好參考價(jià)值的文章主要介紹了玩轉(zhuǎn)Python插入排序,從基礎(chǔ)到進(jìn)階。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

插入排序是一種簡單但有效的排序算法。它的基本思想是將待排序的元素逐個插入已排序序列中的正確位置,直到所有元素都被插入完成。插入排序的算法復(fù)雜度為O(n^2),適用于小規(guī)模的數(shù)據(jù)排序。本文將介紹插入排序的原理、具體實(shí)現(xiàn)和優(yōu)化,并提供相關(guān)的Python代碼示例。

一、插入排序的基本原理

插入排序的基本原理可以用以下步驟描述:

  1. 將待排序序列的第一個元素看作已排序序列。
  2. 從第二個元素開始,逐個將元素插入已排序序列的正確位置。
  3. 每次插入時(shí),從后往前比較已排序序列中的元素,將比當(dāng)前元素大的元素依次向后移動,直到找到合適的插入位置。
  4. 重復(fù)步驟3,直到所有元素都被插入完成,得到有序序列。

插入排序的關(guān)鍵在于找到插入位置并進(jìn)行元素的后移操作。這種排序算法類似于我們打撲克牌時(shí)整理手中的牌,每次將一張新牌插入到已排序的牌中的正確位置。

二、插入排序的具體實(shí)現(xiàn)

下面是插入排序的具體實(shí)現(xiàn)代碼:

def insertion_sort(arr):
    for i in range(1, len(arr)):
        key = arr[i]  # 當(dāng)前待插入元素
        j = i - 1  # 已排序序列的最后一個元素的索引

        while j >= 0 and arr[j] > key:
            arr[j + 1] = arr[j]  # 比當(dāng)前元素大的元素向后移動
            j -= 1

        arr[j + 1] = key  # 將當(dāng)前元素插入到正確位置

    return arr

三、插入排序的優(yōu)化

插入排序是一種簡單但是效率較低的排序算法,特別是對于大規(guī)模數(shù)據(jù)的排序。但是,我們可以通過一些優(yōu)化策略來提高插入排序的性能。

優(yōu)化1:減少元素的比較次數(shù)

在內(nèi)層循環(huán)中,我們可以通過使用“哨兵”來避免每次比較都需要檢查邊界條件。我們可以將待插入的元素復(fù)制到一個臨時(shí)變量中,并將其作為哨兵,然后在內(nèi)層循環(huán)中只比較哨兵與已排序元素,而不是每次都訪問原始數(shù)組。

def insertion_sort(arr):
    for i in range(1, len(arr)):
        key = arr[i]  # 當(dāng)前待插入元素
        j = i - 1  # 已排序序列的最后一個元素的索引

        while arr[j] > key:
            arr[j + 1] = arr[j]  # 比當(dāng)前元素大的元素向后移動
            j -= 1

        arr[j + 1] = key  # 將當(dāng)前元素插入到正確位置

    return arr

優(yōu)化2:使用二分查找確定插入位置

傳統(tǒng)的插入排序是通過逐個比較已排序元素找到正確的插入位置。但是,我們可以使用二分查找來確定插入位置,從而減少比較的次數(shù)。

def insertion_sort(arr):
    for i in range(1, len(arr)):
        key = arr[i]  # 當(dāng)前待插入元素
        left, right = 0, i - 1  # 已排序序列的左右邊界

        while left <= right:
            mid = (left + right) // 2  # 中間位置
            if arr[mid] > key:
                right = mid - 1
            else:
                left = mid + 1

        for j in range(i - 1, left - 1, -1):
            arr[j + 1] = arr[j]  # 比當(dāng)前元素大的元素向后移動

        arr[left] = key  # 將當(dāng)前元素插入到正確位置

    return arr

四、總結(jié)

本文介紹了插入排序的原理、具體實(shí)現(xiàn)和優(yōu)化。插入排序是一種簡單但有效的排序算法,適用于小規(guī)模的數(shù)據(jù)排序。通過不斷將元素插入已排序序列的正確位置,最終得到有序序列。我們還介紹了兩種優(yōu)化策略,包括減少元素的比較次數(shù)和使用二分查找確定插入位置。這些優(yōu)化可以提高插入排序的性能。通過掌握插入排序的原理和優(yōu)化方法,我們可以更好地理解和應(yīng)用這一常用的排序算法。

五、最后

關(guān)注我,更多精彩內(nèi)容立即呈現(xiàn)!文章來源地址http://www.zghlxwxcb.cn/news/detail-569957.html

到了這里,關(guān)于玩轉(zhuǎn)Python插入排序,從基礎(chǔ)到進(jìn)階的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • python知識點(diǎn)100篇系列(11)-浮點(diǎn)數(shù)四舍五入的兩種方法

    python知識點(diǎn)100篇系列(11)-浮點(diǎn)數(shù)四舍五入的兩種方法

    Python 的四舍五入主要有兩種方式; 內(nèi)置函數(shù) round(number[, ndigits]) 使用 Decimal 先說結(jié)論: 如果是對金額的四舍五入,不建議使用內(nèi)置函數(shù),原因如下: 使用round方法: python3中的round函數(shù)對浮點(diǎn)數(shù)進(jìn)行四舍五入的規(guī)則: 參數(shù)ndigits 不為 0 的情況 如果保留位數(shù)的后一位小于等于

    2024年02月07日
    瀏覽(23)
  • Python的知識點(diǎn)運(yùn)用-2(排序&&找差值及修正ts合成順序)

    Python的知識點(diǎn)運(yùn)用-2(排序&&找差值及修正ts合成順序)

    本章內(nèi)容,涉及到上一章的視頻爬蟲,但是問題不大。最主要還是基礎(chǔ)內(nèi)容。 基礎(chǔ)內(nèi)容:排序,找出缺失值。 學(xué)習(xí)本章的前,我是建議去跑一遍gitee上的代碼的。 排序問題由來 視頻獲取后,根據(jù)命名,排序是錯的。問題除了命名以外還有一個因素就是多線程并發(fā)的原因。

    2023年04月09日
    瀏覽(16)
  • 【Vue前端】vue使用筆記0基礎(chǔ)到高手第2篇:Vue進(jìn)階知識點(diǎn)介紹(附代碼,已分享)

    【Vue前端】vue使用筆記0基礎(chǔ)到高手第2篇:Vue進(jìn)階知識點(diǎn)介紹(附代碼,已分享)

    本系列文章md筆記(已分享)主要討論vue相關(guān)知識。Vue.js是前端三大新框架:Angular.js、React.js、Vue.js之一,Vue.js目前的使用和關(guān)注程度在三大框架中稍微勝出,并且它的熱度還在遞增。Vue.js是一個輕巧、高性能、可組件化的MVVM庫,同時(shí)擁有非常容易上手的API。Vue.js是一個構(gòu)建

    2024年02月19日
    瀏覽(29)
  • 【python進(jìn)階】列表排序已經(jīng)掌握?這種將變量插入列表序列的方法你該知道了

    【python進(jìn)階】列表排序已經(jīng)掌握?這種將變量插入列表序列的方法你該知道了

    ???♂?作者簡介:生魚同學(xué),大數(shù)據(jù)科學(xué)與技術(shù)專業(yè)碩士在讀?????,曾獲得華為杯數(shù)學(xué)建模國家二等獎??,MathorCup 數(shù)學(xué)建模競賽國家二等獎??,亞太數(shù)學(xué)建模國家二等獎??。 ??研究方向:復(fù)雜網(wǎng)絡(luò)科學(xué) ??興趣方向:利用python進(jìn)行數(shù)據(jù)分析與機(jī)器學(xué)習(xí),數(shù)學(xué)建模競

    2023年04月08日
    瀏覽(19)
  • 后悔沒早學(xué)這份Python神級文檔!2023最新入門到進(jìn)階核心知識點(diǎn)學(xué)習(xí)文檔!

    后悔沒早學(xué)這份Python神級文檔!2023最新入門到進(jìn)階核心知識點(diǎn)學(xué)習(xí)文檔!

    如今學(xué) Python 的程序員越來越多,甚至不少人會把 Python 當(dāng)作第一語言來學(xué)習(xí)。不過盡管 Python 功能強(qiáng)大上手輕松,但并不代表它的學(xué)習(xí)曲線不陡峭,得來全不費(fèi)工夫。 當(dāng)推開 Python 的大門,你會發(fā)現(xiàn) Python 入門簡單但精通很難??此普Z法記得滾瓜爛熟,但一進(jìn)入實(shí)際項(xiàng)目,就

    2024年02月06日
    瀏覽(28)
  • Python爬蟲基礎(chǔ)知識點(diǎn)

    Python爬蟲基礎(chǔ)知識點(diǎn)

    Python爬蟲是使用Python編寫的程序,可以自動抓取互聯(lián)網(wǎng)上的數(shù)據(jù)。常用的Python爬蟲框架包括Scrapy、BeautifulSoup、Requests等。Python爬蟲可以應(yīng)用于眾多場合,如大數(shù)據(jù)分析、信息監(jiān)測、數(shù)據(jù)挖掘和機(jī)器學(xué)習(xí)等領(lǐng)域。那么新手應(yīng)該如何學(xué)習(xí)python爬蟲呢? 以下是Python爬蟲的基礎(chǔ)知識:

    2024年02月08日
    瀏覽(27)
  • Python基礎(chǔ)知識點(diǎn)入門

    初學(xué)Python時(shí),以下是一些基礎(chǔ)知識點(diǎn)和示例,以幫助你建立堅(jiān)實(shí)的編程基礎(chǔ)。 1. 變量和數(shù)據(jù)類型 Python中的變量用于存儲數(shù)據(jù)。以下是一些常見的數(shù)據(jù)類型和示例: 整數(shù)(int) 浮點(diǎn)數(shù)(float) 字符串(str) 布爾值(bool) 2. 列表(List) 列表是一種有序的數(shù)據(jù)結(jié)構(gòu),可以存儲

    2024年02月07日
    瀏覽(21)
  • Python基礎(chǔ)知識點(diǎn)-- if 語句

    Python基礎(chǔ)知識點(diǎn)-- if 語句

    ? ? ? ?此文章為Python基礎(chǔ)知識點(diǎn)(從入門到實(shí)踐)--? if 語句,此節(jié)Python基礎(chǔ)知識點(diǎn)包括:條件測試、if 語句、使用if 語句處理列表、設(shè)置 if 語句格式。? 目錄 一、條件測試 1.1 檢查是否相等 1.2 檢查是否相等時(shí)區(qū)分大小寫 1.3 檢查是否不相等 1.4 數(shù)值比較 1.5 檢查多個條件

    2024年02月06日
    瀏覽(22)
  • 【數(shù)據(jù)結(jié)構(gòu)】帶你玩轉(zhuǎn)排序:堆排序、希爾排序、插入排序、選擇排序、冒泡排序、快排(多版本)、歸并排序

    【數(shù)據(jù)結(jié)構(gòu)】帶你玩轉(zhuǎn)排序:堆排序、希爾排序、插入排序、選擇排序、冒泡排序、快排(多版本)、歸并排序

    英杰社區(qū) https://bbs.csdn.net/topics/617804998 目錄 常見算法的實(shí)現(xiàn) ? ? ? ? 插入排序 ????????希爾排序 ? ? ? ? 堆排序 ? ? ? ? 選擇排序 ????????冒泡排序 ????????快速排序 ? ? ? ? Hoare版本 ????????隨機(jī)選Keyi? ? ?? ????????三數(shù)取中 ????????挖坑法 ?

    2024年02月08日
    瀏覽(53)
  • Python之字典(dict)基礎(chǔ)知識點(diǎn)

    Python之字典(dict)基礎(chǔ)知識點(diǎn)

    字典是python當(dāng)中的一種數(shù)據(jù)類型,其結(jié)果跟之前學(xué)過的列表、元組有很大區(qū)別,字典內(nèi)部是一個一對一映射的數(shù)據(jù)關(guān)系。 字典語法: dictionary = {key1:value1, key2:value2, ...} key是字典中的鍵,value是對應(yīng)的值 字典必須用大括號{},key與對應(yīng)的value用“:”連接,中間用“,”斷開。

    2024年02月13日
    瀏覽(23)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包