《演算法圖解》NOTE 2 陣列、連結串列及選擇排序
這是《演算法圖解》的第二篇讀書筆記,內容主要涉及陣列、連結串列及選擇排序。
1.陣列
1.1定義
作為一種基礎的資料結構,陣列指的是n個元素按照索引號依次存放在一個記憶體區域的資料結構。其中,索引號相鄰的元素在記憶體的位置也是相鄰的。
1.2優缺點
1.2.1優點
支援隨機訪問。即可根據索引號訪問與之對應的元素,從而實現快速訪問陣列中的元素。
1.2.2缺點
(1)刪除、插入元素慢。若要刪除或插入元素,則需移動制定元素後面的所有元素。
(2)有溢位的可能。陣列的記憶體不足後,需要將整個陣列遷移至容量更大的記憶體中。
1.3適用範圍
需要快速訪問元素、但對插入、刪除元素的速度要求不高的場景。
2.連結串列
2.1定義
一種基礎資料結構,每個元素除了記錄自身的值,還會記錄下一個元素的記憶體地址。
2.2優缺點
2.2.1優點
支援快速插入、刪除元素。插入、刪除元素的操作簡單。只需改變特定元素所指向的記憶體地址,使其指向插入的元素或被刪除元素所指向的元素。
2.2.2缺點
不支援快速訪問元素,需要從連結串列的第一個元素,依次訪問後續的元素,以找出目標元素。
2.3適用範圍
需要快速插入、刪除元素,但對查詢元素的時效性要求較低的場合。
3.選擇排序法
3.1實現原理
遍歷其全部元素,找出其最大(最小)的元素。將其從原來的陣列中移至新的資料結構中。再從剩餘的元素中找出最大(最小)的元素,重複上述移動元素的步驟,直至原來的資料結構中的元素數量為0。
3.2程式碼例項
#演示選擇排序法
import random
#選擇陣列中最小的元素
def select_smallest(arr):
value=float('inf')
idx=None
for i in range(0,len(arr)):
if value>arr[i]:
value=arr[i]
idx=i
return idx
#主題函式
def selection_sort(arr):
#單獨處理arr長度為0或為1的情況
if len(arr)<=1:
return arr
sorted_arr=[]
while arr:
idx=select_smallest(arr)
sorted_arr.append(arr.pop(idx))
return sorted_arr
arr=[random.randint(0,10) for i in range(0,10)]
print('original arr',arr)
print('sorted arr',selection_sort(arr))
相關文章
- 陣列基本操作及冒泡演算法、直接選擇排序陣列演算法排序
- 陣列選擇排序陣列排序
- 單連結串列的排序(插入,選擇,冒泡)排序
- 陣列與連結串列陣列
- 陣列和連結串列陣列
- L2-022 重排連結串列【陣列】陣列
- 圖解選擇排序及演算法優化(Java實現)圖解排序演算法優化Java
- L2-002 連結串列去重【陣列】陣列
- 演算法:排序連結串列:歸併排序演算法排序
- 歸併排序:陣列和連結串列的多種實現排序陣列
- 陣列模擬單連結串列陣列
- 可變陣列——連結串列前言陣列
- 資料結構與演算法整理總結---陣列,連結串列資料結構演算法陣列
- 資料結構--陣列、單向連結串列、雙向連結串列資料結構陣列
- 線性結構 陣列與連結串列陣列
- day1-陣列和連結串列陣列
- 聊聊陣列與連結串列,棧與佇列陣列佇列
- 演算法基礎~連結串列~排序連結串列的合併(k條)演算法排序
- 《啊哈!演算法》-第 2 章:棧、佇列、連結串列演算法佇列
- 重學資料結構和演算法(一)之複雜度、陣列、連結串列、棧、佇列、圖資料結構演算法複雜度陣列佇列
- 選擇排序-演算法及優化排序演算法優化
- 圖解選擇排序與插入排序圖解排序
- 資料結構與演算法——歸併排序: 陣列&連結串列&遞迴&非遞迴解法全家桶資料結構演算法排序陣列遞迴
- 單連結串列的冒泡,快排,選擇,插入,歸併等多圖詳解
- 排序演算法:選擇排序排序演算法
- 排序演算法__選擇排序排序演算法
- 資料結構與演算法——排序演算法-選擇排序資料結構演算法排序
- 【圖解連結串列類面試題】移除連結串列元素圖解面試題
- 【圖解連結串列類面試題】環形連結串列圖解面試題
- 線性表(陣列、連結串列、佇列、棧)詳細總結陣列佇列
- 資料結構與演算法知識點總結(1)陣列與連結串列資料結構演算法陣列
- 面試-陣列和連結串列的區別面試陣列
- 148. 排序連結串列排序
- 連結串列-插入排序排序
- 2、連結串列
- 【圖解資料結構】 一組動畫演示選擇排序圖解資料結構動畫排序
- 陣列模擬雙連結串列,你get到了嗎?陣列
- 陣列模擬單連結串列你會了嗎?陣列