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

Python一行代碼實現(xiàn)快速排序的方法

 更新時間:2019年04月30日 10:11:59   作者:豬哥66  
排序算法是在高考或中考中出現(xiàn)頻率最多的點,所以大家要掌握,今天小編給大家?guī)砹送ㄟ^Python一行代碼實現(xiàn)快速排序的方法,感興趣的朋友跟隨小編一起看看吧

今天將單獨為大家介紹一下快速排序!

一、算法介紹

排序算法(Sorting algorithm)是計算機科學(xué)最古老、最基本的課題之一。要想成為合格的程序員,就必須理解和掌握各種排序算法。其中"快速排序"(Quicksort)使用得最廣泛,速度也較快。它是圖靈獎得主C. A. R. Hoare(托尼·霍爾)于1960時提出來的。


二、算法原理

快排的實現(xiàn)方式多種多樣,豬哥給大家寫一種容易理解的:分治+迭代,只需要三步:

在數(shù)列之中,選擇一個元素作為"基準(zhǔn)"(pivot),或者叫比較值。數(shù)列中所有元素都和這個基準(zhǔn)值進行比較,如果比基準(zhǔn)值小就移到基準(zhǔn)值的左邊,如果比基準(zhǔn)值大就移到基準(zhǔn)值的右邊以基準(zhǔn)值左右兩邊的子列作為新數(shù)列,不斷重復(fù)第一步和第二步,直到所有子集只剩下一個元素為止。

舉個例子,假設(shè)我現(xiàn)在有一個數(shù)列需要使用快排來排序:{3, 44, 38, 5, 47, 15, 36, 26, 27, 2, 46, 4, 19, 50, 48},我們來看看使用快排的詳細步驟:

選取中間的26作為基準(zhǔn)值(基準(zhǔn)值可以隨便選)數(shù)列從第一個元素3開始和基準(zhǔn)值26進行比較,小于基準(zhǔn)值,那么將它放入左邊的分區(qū)中,第二個元素44比基準(zhǔn)值26大,把它放入右邊的分區(qū)中,依次類推就得到下圖中的第二列。然后依次對左右兩個分區(qū)進行再分區(qū),得到下圖中的第三列,依次往下,直到最后只有一個元素分解完成再一層一層返回,返回規(guī)則是:左邊分區(qū)+基準(zhǔn)值+右邊分區(qū)

三、代碼實現(xiàn)

是不是很簡潔很秀,如果再有面試官讓你手寫一個快排,你就把這行寫上去吧,面試官見了都要喊你秀兒,哈哈。

在你感嘆python吊炸天的同時,你因該考慮到代碼的可讀性問題,lambda函數(shù)設(shè)計是為了代碼的簡潔性,但是濫用的話會導(dǎo)致可讀性變得極差,而且現(xiàn)在pep8代碼規(guī)范中也不建議使用lambda函數(shù)了,建議使用關(guān)鍵字def去定義一個函數(shù),所以下面豬哥給大家寫一段符合pythonic風(fēng)格的快排代碼

四、算法分析穩(wěn)定性:

快排是一種不穩(wěn)定排序,比如基準(zhǔn)值的前后都存在與基準(zhǔn)值相同的元素,那么相同值就會被放在一邊,這樣就打亂了之前的相對順序比較性:因為排序時元素之間需要比較,所以是比較排序時間復(fù)雜度:快排的時間復(fù)雜度為O(nlogn)空間復(fù)雜度:排序時需要另外申請空間,并且隨著數(shù)列規(guī)模增大而增大,其復(fù)雜度為:O(nlogn)歸并排序與快排 :歸并排序與快排兩種排序思想都是分而治之,但是它們分解和合并的策略不一樣:歸并是從中間直接將數(shù)列分成兩個,而快排是比較后將小的放左邊大的放右邊,所以在合并的時候歸并排序還是需要將兩個數(shù)列重新再次排序,而快排則是直接合并不再需要排序,所以快排比歸并排序更高效一些,可以從示意圖中比較二者之間的區(qū)別。


五、快排優(yōu)化

快速排序有一個缺點就是對于小規(guī)模的數(shù)據(jù)集性能不是很好??赡苡腥苏J(rèn)為可以忽略這個缺點不計,因為大多數(shù)排序都只要考慮大規(guī)模的適應(yīng)性就行了。但是快速排序算法使用了分治技術(shù),最終來說大的數(shù)據(jù)集都要分為小的數(shù)據(jù)集來進行處理,所以快排分解到最后幾層性能不是很好,所以我們就可以使用揚長避短的策略去優(yōu)化快排:

先使用快排對數(shù)據(jù)集進行排序,此時的數(shù)據(jù)集已經(jīng)達到了基本有序的狀態(tài)然后當(dāng)分區(qū)的規(guī)模達到一定小時,便停止快速排序算法,而是改用插入排序,因為我們之前講過插入排序在對基本有序的數(shù)據(jù)集排序有著接近線性的復(fù)雜度,性能比較好。

這一改進被證明比持續(xù)使用快速排序算法要有效的多。

六、模擬面試面試官:

你了解快排嗎?你:略知一二面試官:那你講講快排的算法思想吧你:快排基本思想是:從數(shù)據(jù)集中選取一個基準(zhǔn),然后讓數(shù)據(jù)集的每個元素和基準(zhǔn)值比較,小于基準(zhǔn)值的元素放入左邊分區(qū)大于基準(zhǔn)值的元素放入右邊分區(qū),最后以左右兩邊分區(qū)為新的數(shù)據(jù)集進行遞歸分區(qū),直到只剩一個元素。面試官:快排有什么優(yōu)點,有什么缺點?你:分治思想的排序在處理大數(shù)據(jù)集量時效果比較好,小數(shù)據(jù)集性能差些。面試官:那該如何優(yōu)化?你:對大規(guī)模數(shù)據(jù)集進行快排,當(dāng)分區(qū)的規(guī)模達到一定小時改用插入排序,插入排序在小數(shù)據(jù)規(guī)模時排序性能較好。面試官:那你能手寫一個快排嗎?你:

七、總結(jié)

以上所述是小編給大家介紹的Python一行代碼實現(xiàn)快速排序的方法,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
如果你覺得本文對你有幫助,歡迎轉(zhuǎn)載,煩請注明出處,謝謝!

相關(guān)文章

  • Python數(shù)據(jù)可視化之Seaborn的使用詳解

    Python數(shù)據(jù)可視化之Seaborn的使用詳解

    Seaborn庫是python中基于matplotlib庫的可視化工具庫,通過sns我們可以更方便地繪制出更美觀的圖表。本文將分享python基于Seaborn庫的一系列繪圖操作,感興趣的可以了解一下
    2022-04-04
  • 使用python庫xlsxwriter庫來輸出各種xlsx文件的示例

    使用python庫xlsxwriter庫來輸出各種xlsx文件的示例

    這篇文章主要介紹了使用python庫xlsxwriter庫來輸出各種xlsx文件的示例,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • Jmeter通過OS進程取樣器調(diào)用Python腳本實現(xiàn)參數(shù)互傳

    Jmeter通過OS進程取樣器調(diào)用Python腳本實現(xiàn)參數(shù)互傳

    這篇文章主要介紹了Jmeter通過OS進程取樣器調(diào)用Python腳本實現(xiàn)參數(shù)互傳,描述在cmd中調(diào)用上面的Python腳本并傳入兩個參數(shù)展開主題,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-03-03
  • Django框架教程之正則表達式URL誤區(qū)詳解

    Django框架教程之正則表達式URL誤區(qū)詳解

    正則表達式對大家來說應(yīng)該都不陌生,下面這篇文章主要給大家介紹了關(guān)于Django框架教程之正則表達式URL誤區(qū)的相關(guān)資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考借鑒,下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2018-01-01
  • 使用Python實現(xiàn)牛頓法求極值

    使用Python實現(xiàn)牛頓法求極值

    今天小編就為大家分享一篇使用Python實現(xiàn)牛頓法求極值,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-02-02
  • python實現(xiàn)KNN近鄰算法

    python實現(xiàn)KNN近鄰算法

    這篇文章主要介紹了python實現(xiàn)KNN近鄰算法的方法,幫助大家更好的利用python進行機器學(xué)習(xí),感興趣的朋友可以了解下
    2020-12-12
  • Python中Matplotlib繪圖保存圖片時調(diào)節(jié)圖形清晰度或分辨率的方法

    Python中Matplotlib繪圖保存圖片時調(diào)節(jié)圖形清晰度或分辨率的方法

    有時我們在使用matplotlib作圖時,圖片不清晰或者圖片大小不是我們想要的,這篇文章主要給大家介紹了關(guān)于Python中Matplotlib繪圖保存圖片時調(diào)節(jié)圖形清晰度或分辨率的相關(guān)資料,需要的朋友可以參考下
    2024-05-05
  • pytorch機器學(xué)習(xí)softmax回歸的簡潔實現(xiàn)

    pytorch機器學(xué)習(xí)softmax回歸的簡潔實現(xiàn)

    這篇文章主要介紹了為大家介紹了pytorch機器學(xué)習(xí)中softmax回歸的簡潔實現(xiàn)方式,有需要的朋友可以借鑒參考下,希望能夠有所幫助
    2021-10-10
  • python 圖片驗證碼代碼

    python 圖片驗證碼代碼

    在網(wǎng)絡(luò)應(yīng)用中,驗證碼常常作為一個必備的手段,用來避免機器人惡意注冊,保證坐在瀏覽器前的是一個人。
    2008-12-12
  • 基于Python實現(xiàn)搶注大詞的提詞工具

    基于Python實現(xiàn)搶注大詞的提詞工具

    這篇文章主要為大家詳細介紹了如何利用Python語言實現(xiàn)搶注大詞的提詞工具,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-02-02

最新評論

洛川县| 湖口县| 万载县| 大丰市| 龙门县| 永寿县| 庆元县| 靖江市| 湖南省| 炉霍县| 温州市| 昆明市| 林西县| 富顺县| 桓台县| 密云县| 噶尔县| 平利县| 兰溪市| 徐州市| 辽阳市| 天水市| 嘉禾县| 玉环县| 祁阳县| 台东市| 宜良县| 石林| 布拖县| 伊金霍洛旗| 淮安市| 乐都县| 松潘县| 阳新县| 繁峙县| 南昌县| 甘谷县| 潼南县| 东宁县| 视频| 中阳县|