邏輯思惟培養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)