常見資料結構和演算法
阿新 • • 發佈:2022-12-08
演算法
演算法定義
演算法指的是一個計算過程 ,解決問題的方法
常見演算法
氣泡排序 選擇排序 插入排序 快速排序 歸併排序 希爾排序
重點掌握冒泡和快排
1. 衡量演算法的標準
時間負責度
演算法的時間複雜度是一個函式,它定性描述該演算法的執行時間 常用大O符號來表示 實際操作中通常指的是程式碼執行的次數
O(1) < O(logn) < O(n) < O(nlogn) < O(n2)<O(n2logn)<O(n3)
如何一眼判斷時間複雜度?
■迴圈減半的過程--->O(logn)
■幾次迴圈就是n的幾次方的複雜度
空間負責度
空間複雜度(Space Complexity)是對一個演算法在執行過程中臨時佔用儲存空間大小的量度,記做S(n)=O(f(n))。
2. 各種演算法
氣泡排序 (重要)
列表每組兩個相鄰的數 如果前邊的比後邊的大 那麼就交換兩個數
# 時間複雜度 O(n^2) def bubble_sort(data): # 判斷是不是列表型別 if isinstance(data,list): for i in range(len(data)): # 假定給的列表就是有序的 就不需要再走後面的邏輯了 flag = True for j in range(len(data)-1): if data[j] > data[j+1]: data[j],data[j+1] = data[j+1],data[j] flag = False # 給的列表有序 if flag: return else: raise TypeError li = [1,5,3,6,2,4,9,8,7] bubble_sort(li) print(li) # [1, 2, 3, 4, 5, 6, 7, 8, 9]
快排(重要)
時間複雜度: O(nlogn)
思路: 遞迴 對比 看動圖
將左邊的第一個數作為一個常數 然後將最右邊的數和常數對比 如果比他大 繼續往左移動一位繼續對比
def quickSort(arr): if len(arr) <= 1: return arr pivot = arr[len(arr) // 2] print(pivot) left = [x for x in arr if x < pivot] middle = [x forx in arr if x == pivot] right = [x for x in arr if x > pivot] return quickSort(left) + middle + quickSort(right) print(quickSort([3,6,8,10,1,6,2,1]))