02-选择排序
數據結構和算法
基于《算法圖解》—Aditya Bhargava和《數據結構》—嚴蔚敏
第2章
2.1 內存的工作原理
計算機就像是很多抽屜的集合體,每個抽屜都有地址。需要將數據存儲到內存是,請求計算機提供存儲空間,計算機則分配一個地址。需要存儲多項數據時,有兩種基本方式—數組和鏈表。
2.2 鏈表和數組
2.2.1 鏈表
- 鏈表中的元素可存儲在內存的任何地方。
- 鏈表的每個元素都存儲了下一個元素的地址,從而是一系列隨機的內存地址串在一起。
- 在鏈表中添加元素很容:只需將其放入內存,并將其地址存儲到前一個元素中。
- 在需要讀取鏈表的最后一個元素時,不能直接讀取,因為不知道地址,必須先訪問第一個元素,從而獲取第二個元素的地址,以此類推。適合讀取全部元素。
2.2.2 數組
- 我們知道數組中的每個元素的地址。適合隨機讀取。
2.2.3 插入元素的對比
- 使用鏈表時,插入元素很簡單,只需修改它前面的那個元素指向的地址。
- 使用數組插入元素時,必須將后面的元素都向后移。
- 所以,當需要在中間插入元素時,鏈表時更好的選擇。
2.2.4 刪除
- 鏈表,只需修改前一個元素指向的地址即可。
- 數組,刪除元素后,必須將后面的元素都向前移。
2.2.5 順序訪問和隨機訪問
- 順序訪問意味著從第一個元素開始逐個地讀取元素。鏈表只能順序讀取。
- 隨機訪問意味著可以直接讀取任何位置的元素。數組支持隨機讀取。
2.3 選擇排序
#找出數組中最小元素的函數 def findSmallest(arr):smallest = arr[0] #存儲最小的值smallest_index = 0 #存儲最小元素的索引for i in range(1, len(arr)):if arr[i] < smallest:smallest = arr[i]smallest_index = ireturn smallest_index#排序算法函數 def selectionSort(arr): #對arr數組進行排序newArr = []for i in range(len(arr)):smallest = findSmallest(arr) #找出數組中最小的元素newArr.append(arr.pop(smallest)) #并將其加入到新數組中return newArr print selectionSort([5,3,6,2,10])2.4 小結
- 計算機內存猶如一大堆抽屜。
- 需要存儲多個元素時,可使用數組或鏈表。
- 數組的元素都有序存放在一起。
- 鏈表的元素是分開的,其中每個元素都存儲了下一個元素的地址。
- 數組的讀取速度很快,特別是隨機讀取。
- 鏈表的插入和刪除速度很快。
- 在同一個數組中,所有元素的數據類型都必須相同。
——持續修改完善中…
總結