python常用的各種排序算法原理與實(shí)現(xiàn)方法小結(jié)
1. 冒泡排序(Bubble Sort)
基本思想:重復(fù)地遍歷待排序的數(shù)列,每次比較相鄰的兩個(gè)元素,如果它們的順序錯(cuò)誤就交換位置,直到?jīng)]有需要交換的元素為止。
實(shí)現(xiàn)代碼:
def bubble_sort(arr): ? ? n = len(arr) ? ? for i in range(n - 1): ? ? ? ? for j in range(n - i - 1): ? ? ? ? ? ? if arr[j] > arr[j + 1]: ? ? ? ? ? ? ? ? arr[j], arr[j + 1] = arr[j + 1], arr[j] ? ? return arr
2. 插入排序(Insertion Sort)
基本思想:將數(shù)組分為已排序區(qū)間和未排序區(qū)間,每次從未排序區(qū)間選擇一個(gè)元素,插入到已排序區(qū)間中的合適位置,直到未排序區(qū)間為空為止。
實(shí)現(xiàn)代碼:
def insertion_sort(arr): ? ? n = len(arr) ? ? for i in range(1, n): ? ? ? ? j = i ? ? ? ? while j > 0 and arr[j] < arr[j - 1]: ? ? ? ? ? ? arr[j], arr[j - 1] = arr[j - 1], arr[j] ? ? ? ? ? ? j -= 1 ? ? return arr
3. 選擇排序(Selection Sort)
基本思想:每次從未排序區(qū)間選擇最小的元素,放入已排序區(qū)間末尾,直到未排序區(qū)間為空為止。
實(shí)現(xiàn)代碼:
def selection_sort(arr): ? ? n = len(arr) ? ? for i in range(n - 1): ? ? ? ? min_idx = i ? ? ? ? for j in range(i + 1, n): ? ? ? ? ? ? if arr[j] < arr[min_idx]: ? ? ? ? ? ? ? ? min_idx = j ? ? ? ? arr[i], arr[min_idx] = arr[min_idx], arr[i] ? ? return arr
4. 快速排序(Quick Sort)
基本思想:選定一個(gè)pivot,將數(shù)組分成左右兩個(gè)部分,使得左邊部分中的元素都小于pivot,右邊部分中的元素都大于pivot。然后對(duì)左右兩個(gè)部分遞歸地進(jìn)行快排。
實(shí)現(xiàn)代碼:
def quick_sort(arr): ? ? if len(arr) <= 1: ? ? ? ? return arr ? ? pivot = arr[0] ? ? left, right = [], [] ? ? for x in arr[1:]: ? ? ? ? if x < pivot: ? ? ? ? ? ? left.append(x) ? ? ? ? else: ? ? ? ? ? ? right.append(x) ? ? return quick_sort(left) + [pivot] + quick_sort(right)
雖然這些算法都是常見(jiàn)的排序算法,但在實(shí)際應(yīng)用中,不同算法的性能會(huì)因數(shù)據(jù)規(guī)模、數(shù)據(jù)分布等因素而有所不同,需要具體問(wèn)題具體分析,選擇合適的算法來(lái)解決。
- python實(shí)現(xiàn)冒泡排序算法的兩種方法
- python 實(shí)現(xiàn)插入排序算法
- python選擇排序算法的實(shí)現(xiàn)代碼
- python 實(shí)現(xiàn)歸并排序算法
- Python實(shí)現(xiàn)各種排序算法的代碼示例總結(jié)
- Python實(shí)現(xiàn)的直接插入排序算法示例
- 八大排序算法的Python實(shí)現(xiàn)
- python 實(shí)現(xiàn)堆排序算法代碼
- python算法學(xué)習(xí)之桶排序算法實(shí)例(分塊排序)
- Python實(shí)現(xiàn)的幾個(gè)常用排序算法實(shí)例
- python實(shí)現(xiàn)歸并排序算法
相關(guān)文章
使用IronPython把Python腳本集成到.NET程序中的教程
這篇文章主要介紹了使用IronPython把Python腳本集成到.NET程序中的教程,現(xiàn)在剛剛被微軟開(kāi)源的.NET重新成為業(yè)界熱點(diǎn)、本文介紹了使Python和.NET交互的IronPython,需要的朋友可以參考下2015-03-03Python操作SQLite數(shù)據(jù)庫(kù)過(guò)程解析
這篇文章主要介紹了Python操作SQLite數(shù)據(jù)庫(kù)過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-09-09Python實(shí)現(xiàn)TOPSIS分析法的示例代碼
TOPSIS法是一種常用的綜合評(píng)價(jià)方法,其能充分利用原始數(shù)據(jù)的信息,其結(jié)果能精確反應(yīng)各評(píng)價(jià)方案之間的差距。本文將利用Python實(shí)現(xiàn)這一方法,感興趣的可以了解一下2023-02-02Jupyter Notebook內(nèi)使用argparse報(bào)錯(cuò)的解決方案
這篇文章主要介紹了在Jupyter Notebook內(nèi)使用argparse報(bào)錯(cuò)的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-06-06python實(shí)現(xiàn)比較兩段文本不同之處的方法
這篇文章主要介紹了python實(shí)現(xiàn)比較兩段文本不同之處的方法,涉及Python針對(duì)文本與字符串的相關(guān)操作技巧,需要的朋友可以參考下2015-05-05Python中SQLite數(shù)據(jù)庫(kù)的使用
SQLite是一種輕型關(guān)系型數(shù)據(jù)庫(kù),常用于嵌入式設(shè)備和移動(dòng)應(yīng)用中。Python中內(nèi)置了SQLite模塊,可用于連接和操作SQLite數(shù)據(jù)庫(kù)。通過(guò)Python SQLite模塊,可以方便地創(chuàng)建、查詢和修改數(shù)據(jù)庫(kù)中的數(shù)據(jù),支持事務(wù)處理和數(shù)據(jù)庫(kù)操作的原子性保證2023-04-04python實(shí)現(xiàn)logistic分類算法代碼
今天小編就為大家分享一篇python實(shí)現(xiàn)logistic分類算法代碼,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-02-02