使用Python怎么實現(xiàn)快速排序-創(chuàng)新互聯(lián)

使用Python怎么實現(xiàn)快速排序?很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。

10多年的新邵網(wǎng)站建設(shè)經(jīng)驗,針對設(shè)計、前端、開發(fā)、售后、文案、推廣等六對一服務(wù),響應(yīng)快,48小時及時工作處理。網(wǎng)絡(luò)營銷推廣的優(yōu)勢是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動調(diào)整新邵建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計,從而大程度地提升瀏覽體驗。創(chuàng)新互聯(lián)建站從事“新邵網(wǎng)站設(shè)計”,“新邵網(wǎng)站推廣”以來,每個客戶項目都認真落實執(zhí)行。

算法原理

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

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

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

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

使用Python怎么實現(xiàn)快速排序

三、代碼實現(xiàn)

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

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

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

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


使用Python怎么實現(xiàn)快速排序

五、快排優(yōu)化

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

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

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

六、模擬面試面試官:

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

看完上述內(nèi)容是否對您有幫助呢?如果還想對相關(guān)知識有進一步的了解或閱讀更多相關(guān)文章,請關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝您對創(chuàng)新互聯(lián)的支持。

文章名稱:使用Python怎么實現(xiàn)快速排序-創(chuàng)新互聯(lián)
新聞來源:http://muchs.cn/article4/dsggie.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供響應(yīng)式網(wǎng)站、域名注冊、服務(wù)器托管定制開發(fā)、網(wǎng)站營銷、ChatGPT

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都seo排名網(wǎng)站優(yōu)化