1. 程式人生 > 其它 >常見資料結構和演算法

常見資料結構和演算法

演算法

演算法定義

演算法指的是一個計算過程  ,解決問題的方法

常見演算法

氣泡排序  選擇排序 插入排序  快速排序  歸併排序  希爾排序

重點掌握冒泡和快排

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 for
x 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]))