《算法圖解》第二章筆記與課后練習_選擇排序算法


軟件環境:Python 3.7.0b4

一、選擇排序

# 找出數組中的最小元素
def findSmallest(arr):
  # 存儲最小的值
  smallest = arr[0]
  # 存儲最小元素的索引
  smallest_index = 0
  for i in range(1, len(arr)):
    if arr[i] < smallest:
      smallest_index = i
      smallest = arr[i]      
  return smallest_index

# 排序算法
def selectionSort(arr):
  newArr = []
  for i in range(len(arr)):
      # 找出數組中最小的元素,並將其加入到新的數組中
      smallest = findSmallest(arr)
      newArr.append(arr.pop(smallest))
  return newArr

 

 

二、課后練習

 

答案(如果有更好的歡迎評論或私信~)

2.1:每天都在列表中添加支出項,但每月只讀取支出一次。而數組的讀取速度很快,但插入速度慢;鏈表的讀取速度慢,但插入速度快。因為我們執行的插入操作比讀取操作多,因此使用鏈表合適。

2.2:經常要執行插入操作——服務員添加點菜單,而鏈表的插入速度很快;而且不需要執行查找和隨機訪問操作(這是數組擅長的),因為廚師總是從隊列中取出第一個點菜單。綜上所述,使用鏈表合適。

2.3:有序數組。數組讓你能夠隨機訪問從而立即獲取數組中間的元素,而使用鏈表無法這樣操作。要獲取鏈表中間的元素,就必須從第一個元素開始,沿鏈接逐漸找到這個元素。

2.4:數組的插入速度很慢。另外如果要使用二分查找算法來查找用戶名,數組必須是有序的,因此每次插入用戶名后,都必須對數組進行排序。

2.5:查找時,其速度比數組慢,但比鏈表快;而在插入時,其速度比數組快,但與鏈表相當。因此,除了查找速度比數組慢,其他方面並不比鏈表慢。

 

三、小結

  • 需要存儲多個元素時,可使用數組或鏈表。
  • 數組的元素都是連在一起的,就像一節節車廂。
  • 鏈表的元素是分散開的,其中每個元素都存儲了下一個元素的地址。
  • 數組的讀取速度很快。
  • 鏈表的插入和刪除的速度很快。
  • 在同一個數組中,所有元素的類型都必須相同(都為int、double等)。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM