1. 程式人生 > >07-看圖理解資料結構與算法系列(選擇排序)

07-看圖理解資料結構與算法系列(選擇排序)

選擇排序

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

排序要點

  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,現在進行選擇排序。

 

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。

 

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
作者:超人汪小建
連結:https://juejin.im/post/5b74c3b76fb9a009d22fc858
來源:掘金
著作權歸作者所有。商業轉載請聯絡作者獲得授權,非商業轉載請註明出處。