算法圖解(選擇排序)

前言:程序員

今天是第二篇  學習兩種數據結構 --- 數組、鏈表算法

在這以前你必須明白什麼是大O表示法和對數  後面的算法也都會使用大O表示法編程

根據條件選擇合適的排序  數組和鏈表各有優缺點  排序是一種重要的算法數組

數組是快速查找的基石  二分查找就是基於數組排序數據結構

鏈表修改速度快   若是有其餘算法排理解起來會更容易app

選擇算法:編程語言

內存的工做原理:學習

  •     就比如超市裏的儲物櫃每一抽屜都才能夠存東西並且對應條形碼
  •     每個條形碼就比如內存地址
  •     計算機的內存就好像是不少抽屜的集合
  •    fe0ffeeb是一個內存單元的地址

須要儲存多項數據時有兩種基本方式 鏈表、數組 但他們並不是都適用於全部情形spa

所以知道他們的差異很重要code

數組和鏈表:

就比如你跟朋友去看電影,找到地方坐下後又來一位朋友,但原來坐的地方沒位置了

你須要從新找一個能夠容納四我的的地方  全部人都會移到哪裏去

若是又來一位就須要從新找地方

就比如內存空間 有一種作法是提早預留空間這種作法並很差

  • 第一若是添加元素超出預留空間仍是要從新分配內存
  • 第二若是預留空間用不上 純屬浪費內存空間 你不用別人也用不了  再多的內存也架不住程序員的浪費

鏈表:

    鏈表中的元素可用存放在內存的任何地方

   每一個元素都存儲了下一元素的地址 從而使一些隨機的內存串在一塊兒

   使用鏈表時 根本不須要移動元素 好比說6我的一塊兒看電影 沒有連座

   這裏用上網更合適 網吧打LOL 五連坐  對吧   若是沒有五連坐 那咱們只好分開來坐

   所以只要有足夠的內存空間就能夠爲鏈表分配內存

  鏈表的每個元素記錄下一個元素地址 索引你在讀取時必須讀取到當前元素才能

  獲取下一個元素的地址

數組:

  數組每一個元素都有其地址

 

如圖一個數組內有5個元素你只要知道其中一個就能夠簡單推算出其他數組的位置

數組是從0開始的 幾乎全部的編程語言的整數都是從0開始的

 

 

 

  • 元素的位置稱爲索引也叫下標

鏈表特色:

  • 鏈表插入數據時不須要考慮位置關係只要有足夠的空間就能夠插入
  • 鏈表的插入是隨機的其元素沒有順序  因此插入元素時鏈表是更好的選擇
  • 刪除元素鏈表也是更好的選擇 由於只需修改一個元素指向的地址便可

數組特色:

  • 數組的支持隨機訪問和順序訪問 
  • 讀取效率很是高 數組是有序的
  • 數組的就該就顯得笨拙了 每次修改都要從新分配內存
  • 插入數據時必須將後面的全部元素進行後移

 

 

O(n)表明遍歷每個元素一次

有了前面的知識你在選擇排序時就能選擇適當的儲存方式就能夠快速高效的排序

 

 選擇排序時一種靈巧的算法,其速度不是很快  快速排序是一種更快的排序算法

其運行時間爲  O(n log n) 後面講.....

 

小結:

  1. 極端及內存有了一大堆抽屜
  2. 須要存儲多個元素時,可以使用數組或鏈表
  3. 數組的元素都在一塊兒
  4. 鏈表的元素是分開的,其中每一個元素都儲存在一個元素的地址
  5. 數組的讀取速度很快
  6. 鏈表的插入和刪除速度很快
  7. 在同一個數組中,全部元素的類型都必須相同(都爲int,float等)
  8. 通常而言數組的使用較廣泛

 

 

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

相關文章
相關標籤/搜索