[py]數據結構和算法-冒泡排序

用Python實現的數據結構與算法html

數據結構和算法能夠培養一我的的邏輯思惟(推薦幾本書)

邏輯思惟培養python

嚴蔚敏的數據結構(排序 查找 列表 堆棧 隊列 樹的簡單部分)
大話數據結構
數據結構與算法分析 (豆瓣) 9.2分
算法 (豆瓣) 9.3分
算法導論 (豆瓣) 9.4分

等差數列
(首項+尾項) * (項數的一半)linux

複雜度: 評定算法之間對比的優劣

複雜度: 爲了評定算法之間對比的優劣. 執行完算法所用的次數. 數組有n項,複雜度就是n*n
    時間複雜度(執行完算法所需的時間,通常說的複雜度是指這個)
    空間複雜度

冒泡算法

軟件須要關注的算法(冒泡 快排) + 數據結構(list dict(hash表) 鏈表) + 網絡(tcp三次握手 http常見狀態 header) + 操做系統git

冒泡排序 
    複雜度O(n^2)(通常指的時間複雜度, 空間複雜度指的是佔用磁盤空間,通常咱們不理睬)
    穩定性: 冒泡是穩定的

實現效果: 第一次排序最大的歸到最後一位, 第二次排序,次大的歸到倒數第二位.
思路實現:
算法

比較過程
數組

實現冒泡排序並優化

arr = [3, 5, 1, 32, 4]

for j in range(4):
    for i in range(4):
        if arr[i] < arr[i + 1]:
            arr[i + 1], arr[i] = arr[i], arr[i + 1]
print arr

--
[32, 5, 4, 3, 1]




- 方法2
arr = [3, 5, 1, 32, 4]

j = 0
while j < len(arr) - 1:
    for i in range(len(arr) - 1):
        if arr[i] > arr[i + 1]:
            arr[i + 1], arr[i] = arr[i], arr[i + 1]
    j += 1
print arr

最終冒泡-通過優化

算法複雜度: O(n^2)網絡

- 方法3-優化,比較規範
arr = [3,2,11,13,9]

l = len(arr) - 1 #爲什麼要減去1呢,由於若是10個數字, 第九個數字和最後一個數字比是第九次, 爲了優化,因此減去1

for i in range(l):
    for j in range(l-i): 
        if arr[j] > arr[j+1]:
            arr[j],arr[j+1] = arr[j+1],arr[j]
print(arr)
相關文章
相關標籤/搜索