前言:程序員
今天是第二篇 學習兩種數據結構 --- 數組、鏈表算法
在這以前你必須明白什麼是大O表示法和對數 後面的算法也都會使用大O表示法編程
根據條件選擇合適的排序 數組和鏈表各有優缺點 排序是一種重要的算法數組
數組是快速查找的基石 二分查找就是基於數組排序數據結構
鏈表修改速度快 若是有其餘算法排理解起來會更容易app
選擇算法:編程語言
內存的工做原理:學習
須要儲存多項數據時有兩種基本方式 鏈表、數組 但他們並不是都適用於全部情形spa
所以知道他們的差異很重要code
數組和鏈表:
就比如你跟朋友去看電影,找到地方坐下後又來一位朋友,但原來坐的地方沒位置了
你須要從新找一個能夠容納四我的的地方 全部人都會移到哪裏去
若是又來一位就須要從新找地方
就比如內存空間 有一種作法是提早預留空間這種作法並很差
鏈表:
鏈表中的元素可用存放在內存的任何地方
每一個元素都存儲了下一元素的地址 從而使一些隨機的內存串在一塊兒
使用鏈表時 根本不須要移動元素 好比說6我的一塊兒看電影 沒有連座
這裏用上網更合適 網吧打LOL 五連坐 對吧 若是沒有五連坐 那咱們只好分開來坐
所以只要有足夠的內存空間就能夠爲鏈表分配內存
鏈表的每個元素記錄下一個元素地址 索引你在讀取時必須讀取到當前元素才能
獲取下一個元素的地址
數組:
數組每一個元素都有其地址
如圖一個數組內有5個元素你只要知道其中一個就能夠簡單推算出其他數組的位置
數組是從0開始的 幾乎全部的編程語言的整數都是從0開始的
鏈表特色:
數組特色:
O(n)表明遍歷每個元素一次
有了前面的知識你在選擇排序時就能選擇適當的儲存方式就能夠快速高效的排序
選擇排序時一種靈巧的算法,其速度不是很快 快速排序是一種更快的排序算法
其運行時間爲 O(n log n) 後面講.....
小結:
def FindSmallest(arr): smallest = arr[0] # 存儲最小的值 smallest_index = 0 #存儲最小元素的索引 for x in range(1, len(arr)): if arr[x] < smallest: smallest = arr[x] smallest_index = x return smallest_index def SelectionSort(arr): # 對數值進行排序 newarr = [] for x in range(len(arr)): smallest = FindSmallest(arr) # 找出數組中最小的元素 newarr.append(arr.pop(smallest)) # 將其加入到新的列表 return newarr print(SelectionSort([3, 54, 7, 65, 12, 54, 5]))