看圖輕鬆理解數據結構與算法系列(選擇排序)

前言

推出一個新系列,《看圖輕鬆理解數據結構和算法》,主要使用圖片來描述常見的數據結構和算法,輕鬆閱讀並理解掌握。本系列包括各類堆、各類隊列、各類列表、各類樹、各類圖、各類排序等等幾十篇的樣子。mysql

選擇排序

選擇排序是一種很簡單直觀的排序算法,主要思想就是每次從待排序的元素中選擇出最大或最小的那個元素,而後將其放至已排序序列的末尾,直到所有待排序序列都排序完畢。算法

排序要點

  1. 初始狀態時,待排序序列爲a1,a2,...an,已排序序列爲空。
  2. 第一趟排序,從待排序序列中找到最大或最小元素ak,將其與待排序序列的第一個元素a1對換,此時已排序序列爲ak,長度爲增長1,待排序序列長度減小1,變爲n-1,其中ak被抽走了。
  3. 第二趟排序,從待排序序列中找到最大或最小元素aj,將其與待排序序列的第一個元素a2對換,此時已排序序列爲ak,aj,長度增長1,變爲2,待排序序列長度減小1,變爲n-2,其中aj又被抽走了。
  4. 不斷進行上面的排序操做,直到通過n-1趟排序後完成整個序列的排序。最終待排序序列爲空,已排序序列長度爲n。

排序過程

假設咱們有以下5個元素,分別爲84,25,59,71,62,如今進行選擇排序。sql

image

第一趟,此時待排序序列爲84,25,59,71,62,任務是從中找到最小元素,並與第一個元素調換做爲已排序序列的第一個元素。最小元素能夠經過逐一比較找到。頭兩個元素比較,較小的是25,網絡

image

接着下一個元素59與25比較,較小的是25,數據結構

image

接着下一個元素71與25比較,較小的是25,併發

image

接着下一個元素62與25比較,較小的是25,完成所有元素比較,最小元素爲25。機器學習

image

最小元素對調到原來待排序序列的第一個位置,便是放到已排序序列的尾部,此時已排序序列只有一個元素。而下一趟的待排序序列爲84,59,71,62,繼續尋找最小元素,84與59比較,59較小,數據結構和算法

image

接着下一個元素71與59比較,較小的是59,學習

image

接着下一個元素62與59比較,較小的是59,完成所有元素比較,最小元素爲59。.net

image

最小元素對調到原來待排序序列的第一個位置,便是放到已排序序列的尾部,此時已排序序列有兩個元素。而下一趟的待排序序列爲84,71,62,繼續尋找最小元素,84與71比較,71較小,

image

接着下一個元素62與71比較,較小的是62,完成所有元素比較,最小元素爲62。

image

最小元素對調到原來待排序序列的第一個位置,便是放到已排序序列的尾部,此時已排序序列有三個元素。而下一趟的待排序序列爲71,84,繼續尋找最小元素,71與84比較,71較小,

image

71爲最小元素,對調到原來待排序序列的第一個位置,便是放到已排序序列的尾部,此時已排序序列有四個元素。下一趟只待排序序列只剩一個元素了,無需繼續比較,直接添加到已排序序列的尾部,完成整個排序工做。

image

穩定性

排序的穩定性主要是指在待排序序列中,存在多個具備相同值的元素,若是通過某種排序算法後這些相同值的元素之間相對次序保持不變,則稱該排序算法是穩定的。而若是它們之間相對次序打亂了,則爲不穩定。

選擇排序爲不穩定排序算法。

假設咱們要排序的序列爲84,25,84,71,62,這其中包含了兩個值爲84的元素,按照選擇排序方法對其進行排序。

image

第一趟排序,元素25和第一個元素84對調,

image

第二趟排序,元素62和第一個元素84對調,

image

第三趟排序,元素71和第二個元素84對調,

image

最終的狀態以下,能夠看到兩個值爲84的元素的次序已經變化了。

image

-------------推薦閱讀------------

個人開源項目彙總(機器&深度學習、NLP、網絡IO、AIML、mysql協議、chatbot)

爲何寫《Tomcat內核設計剖析》

個人2017文章彙總——機器學習篇

個人2017文章彙總——Java及中間件

個人2017文章彙總——深度學習篇

個人2017文章彙總——JDK源碼篇

個人2017文章彙總——天然語言處理篇

個人2017文章彙總——Java併發篇


跟我交流,向我提問:

歡迎關注:

相關文章
相關標籤/搜索