1. 程式人生 > >利用Python實現氣泡排序

利用Python實現氣泡排序

今天說一個比較簡單易懂的演算法,相信大家在大學裡面肯定都有接觸過。在這裡介紹排序演算法的一種氣泡排序,對於初學Python的新人來說因該很容易理解。排序顧名思義,對給定的一串字元(其實也不一定是字元,可以是其他可比較的元素)按照從大到小或者從小到大的順序排列。
演算法原理:
1.從第一位開始比較相鄰的兩個元素。如果前者比後者大(由小到大排序),那麼我們就交換它們。
2.針對每一個兩兩相鄰的元素都做比較操作。直到把所有元素比較完。這個時候最後一個元素是最大值。
3.此時我們在從頭比較,重複第二步的操作,直到比較出倒數第二大的元素。
4.以此類推知道所有的元素全部比較完成,這樣從小到大序列即排序完成。

下面貼上程式碼示例,既然上面解釋是從小到大那我們程式碼來個從大到小把:)
這裡我們直接用random模組來隨機獲取值。

import random


def bubblesort(target):
    length = len(target)
    while length > 0: 
        length -= 1
        cur = 0
        while cur < length: #拿到當前元素
            if target[cur] < target[cur + 1]:
                target[cur], target[cur + 1
] = target[cur + 1], target[cur] cur += 1 return target if __name__ == '__main__': a = [random.randint(1,1000) for i in range(100)] print bubblesort(a)

這裡外層迴圈用來控制這個序列長度和比較次數。第二層迴圈用來交換。
按照慣例,來分析一下時間複雜度。我們先來定義比較次數記為C,元素的移動次數記為M。若我們隨機到正好一一串從小到達排序的數列,那我們比較的一趟比較就能完事,那比較次數只與你定義的數列長度有關,則C=n-1,因為正好是從小到達排列的所以不需要在移動了,所以M=0。所以這個時候氣泡排序為最為理想的時間複雜度O(n)。
那麼我們現在再來考慮一個極端的情況,整個序列都是反序的。則完成排序需要n-1次排序,每次排序需要n-i次比較(1<=i<=n-i),在演算法上比較之後移動資料需要三次操作。在這種情況下,比較和移動的數均達到了最大值。

Cmax=n(n-1)/2=O(n^2)
Mmax=3n(n-1)/2=O(n^2)
所以,冒泡演算法總的平均時間複雜度為O(n^2)

相關推薦

利用Python實現氣泡排序

今天說一個比較簡單易懂的演算法,相信大家在大學裡面肯定都有接觸過。在這裡介紹排序演算法的一種氣泡排序,對於初學Python的新人來說因該很容易理解。排序顧名思義,對給定的一串字元(其實也不一定是字元,可以是其他可比較的元素)按照從大到小或者從小到大的順序排列。

Python實現氣泡排序,選擇排序,快速排序

氣泡排序 原理 : 氣泡排序(Bubble Sort)也是一種簡單直觀的排序演算法。它重複地走訪過要排序的數列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。走訪數列的工作是重複地進行直到沒有再需要交換,也就是說該數列已經排序完成。 def bubble_sor

python實現氣泡排序演算法的方法

list = [] print('你想排列幾個數?') try: num = int(input()) for i in range(num): a = int(inpu

python語法基礎之:使用python實現-氣泡排序

接上回,之前說過在做美女人體藝術站,需要採集資料,使用的是python進行採集,從而開始學習python語法知識,現在分享下使用python進行氣泡排序的語句 氣泡排序(英語:Bubble Sort)是一種簡單的排序演算法。它重複地遍歷要排序的數列,一次比較兩個元素,如

Python實現氣泡排序

最近在學習Python,下面是我的一些筆記 氣泡排序 實現思路 : 使用雙重for迴圈,內層變數為i, 外層為j,在內層迴圈中不斷的比較相鄰的兩個值(i, i+1)的大小,如果i+1的值大於i的值,交換兩者位置,每迴圈一次,外層的j增加1,等到j等於n-

利用Python實現歸併排序

在講歸併排序之前我們先來了解一下什麼是分治演算法。為什麼歸併排序屬於分治演算法的體現。 分治演算法 分治演算法基本思想就是將一個比較大規模的問題分解成為若干個規模較小的性質和原問題性質必須要保

利用Python實現歸並排序

但是 list port ret detail conf 需要 思路 http 利用python進行歸並排序,摘抄自http://blog.csdn.net/minxihou/article/details/51821052 “代碼真的不是一氣呵成的,而且也不是想當然寫出來

python實現選擇排序法、氣泡排序法、插入排序

氣泡排序法 l = [10, 1, 18, 30, 23, 12, 7, 5, 18, 17] for n in range(len(l)-1): for i in range(len(l)-n-1): if l[i] > l[i+1]:

python語言實現氣泡排序

氣泡排序:     eg: 54 26 93 17 77 31 44 55 20 從第一個開始依次與後面相鄰一個數字相比較,54比26小,26排在第一個,54排到第二個,54與93再次相比54小排在前面,94去再次與後面的相比,依次輪迴,得出最後結果  

c++:利用模板類實現氣泡排序

首先我們來明確函式模板與類模板的概念及其用法。 模板是一種對型別進行引數化的工具,通常有兩種形式------>函式模板和類模板。 函式模板針對僅引數型別不同的函式; 類模板針對僅資料成員和成員函式型別不同的類。 函式模板的格式:     template &l

c 和 Python 實現交換排序氣泡排序,改進氣泡排序

c: #include <iostream>  using namespace std;   #define MAXSIZE 10 typedef struct {     int r[MAXSIZE+1];     int length; }SqList;

使用python實現冒泡排序和快速排序

code def bubble python實現 style range 交換 冒泡排序 sdn 1 def bubble(arr): 2 """冒泡排序""" 3 loop = len(arr) - 1 4 if loop > 0:

python-實現快速排序

code urn print lis 退出 快速 turn utf-8 col # encoding=utf-8 def quick_sort(alist, start, end): """快速排序""" if start >= end:

python語法基礎之:使用python實現-冒泡排序

接上回,之前說過在做美女人體藝術站,需要采集數據,使用的是python進行采集,從而開始學習python語法知識,現在分享下使用python進行冒泡排序的語句 冒泡排序(英語:Bubble Sort)是一種簡單的排序算法。它重復地遍歷要排序的數列,一次比較兩個元素,如果他

python實現快速排序

body 一個數 有一個 name title main 大於 16px pos 快速排序在於快,大概思想是:先使用一個數值作為中間值,通過第一次排序將數組分為兩部分,左邊的都比這個數值小, 右邊的都比這個數值大,再利用遞歸將這兩部分數組進行同樣的排序: 1 def q

【程序員筆試面試必會——排序②】Python實現 計數排序、基數排序

16px 最大 元素 size medium log n) python實現 count 一、計數排序 概要:     時間復雜度O(n),空間復雜度O(k),k是輸入序列的值的範圍(最大值-最小值),是穩定的。計數排序一般用於已知輸入值的範圍相對較小,比如給公司員工的身高

利用python實現批量查詢ip地址歸屬地址

proc shadow 手動 color sys copy lis rip image 今天需要查詢nginx訪問的客戶端ip是否和調度一樣!先是用shell把文件中的ip截取出來: python腳本如下:(哈哈,新手寫的很草率)#!/usr/bin/env#-- codi

算法——python實現快速排序(二分法思想)

append exc microsoft 部分 input temp style 數字 快速排序 實現思路   將所需要的數字存入一個列表中 首先,設置將最左側的那個數設置為基準數,在列表中索引為0 然後設置兩個移動位(用於比較),分別為最左邊和最右邊 然後最右邊那位向左

php如何利用python實現對pdf文件的操作(讀寫、合並分割)

PHP實現pdf文件截取 PHP調用python腳本 php如何利用python實現對pdf文件的操作 需求:在PHP裏實現了把8.pdf的前4頁pdf文件截取出來生成新的pdf文件。 詳細步驟如下: 1. 安裝python第三方庫PyPDF2 前提:python必須是3.x版本以上,必要時需要升級p

利用Python實現爬去彩票網站數據&mdash;&mdash;小樣

編程語言 Python 寫這篇文章純屬自娛自樂。主要是近期在自學如何利用Python解決IT運維的一些問題時,總是不得其門而入,為了增加學習興趣,就想通過完成一個小小有趣的爬蟲程序激勵下自己,同時也把這次經歷跟各位道友分享下。Technorati Tags: Python,爬網,彩票,數據,夏明亮首先