排序之選擇排序

2022-07-07 14:24:10 字數 959 閱讀 5002

選擇排序思路:

首先,找到陣列中最小的那個元素,其次,將它和陣列的第乙個元素交換位置(如果第乙個元素就是最小元素那麼它就和它自己交換)。

再次,在剩下的元素中找到最小的元素,將它和陣列的第二個元素交換位置。如此往復,直到將整個陣列排序。這種方法叫做選擇排序,因為它在不斷的選擇剩餘元素中的最小者。

def

sort(arr):

arr_len =len(arr)

for i in

range(arr_len):

min_i =i

for j in range(i + 1, arr_len):

ifless(arr[j], arr[min_i]):

min_i =j

exchange(arr, i, min_i)

如上述**所示,選擇排序的內迴圈只是在比較當前元素與目前已知的最小元素,這已經簡單到了極點。交換元素的**寫在內迴圈之外,每次交換都能排定乙個元素,因此交換的總次數是n。所以演算法的時間效率取決於比較多次數。

分析可知:對於長度為n的陣列,選擇排序需要大約n2/2次比較和n次交換。因為對於索引為0到n-1的任意元素都會進行一次交換和n-1-i次比較,所以總共有n次交換以及(n-1)+(n-2)+...+2+1=n(n-1)/2 ~ n2/2次比較。

總的來說,選擇排序是一種很容易理解和實現的簡單排序演算法,它有兩個很鮮明的特點。

1.執行時間和輸入狀態無關:為了找出最小的元素而掃瞄一遍陣列並不能為下一遍掃瞄提供任何資訊。這種性質在某些情況下是缺點,因為使用選擇排序的人可能會驚訝地發現,乙個已經有序的陣列或是主鍵全部相等的陣列和乙個元素隨機排列的陣列所用的排序時間竟然是一樣的!我們將會看到其它的演算法會更善於利用輸入的初始狀態。

2.資料移動是最少的:每次交換都會改變兩個陣列元素的值,因此選擇排序用了n次交換,交換次數和陣列大小是線性關係。我們將要研究的其它演算法都不具備這個特性,大部分增長數量級都是線性對數或是平方級。

排序之選擇排序

書接上文,下面是選擇排序。選擇排序是最容易想到也是最容易實現的排序方式。主要思想 n個元素的陣列,每次從原陣列中找到最小的乙個元素,將這個元素加入新陣列,再把這個元素從元陣列中刪除,就完成了一次選擇。經過n 1次選擇後原陣列中剩下乙個元素,就是最大的乙個元素,將他加入新陣列裡,就完成了選擇排序。這個...

排序之選擇排序

選擇排序 selection sort 是一種簡單直觀的排序演算法。它的工作原理是每一次從待排序的資料元素中選出最小 或最大 的乙個元素,存放在序列的起始位置,直到全部待排序的資料元素排完。選擇排序是不穩定的排序方法。乙個長度為n的待排序列,先找出 0,n 1 區間內最小的數,放在第一位,再找出 2...

排序之選擇排序

二 選擇排序 1 選擇排序 區間在不斷地變小 基本思想 選擇排序 selection sort 是一種簡單直觀的排序演算法。它的工作原理是每一次從待排序的資料元素中選出最小 或最大 的乙個元素,存放在序列的起始位置,直到全部待排序的資料元素排完。首先,選出最小的數放在第一位,然後選擇第二小的數,放在...