《演算法圖解》NOTE 2 陣列、連結串列及選擇排序

weixin_34365417發表於2018-05-22

這是《演算法圖解》的第二篇讀書筆記,內容主要涉及陣列、連結串列及選擇排序。

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))

相關文章