選擇排序 selectsort

2021-07-16 04:54:56 字數 1249 閱讀 9608

選擇排序(selection sort)是一種簡單直觀的排序演算法。它的工作原理是每一次從待排序的資料元素中選出最小(或最大)的乙個元素,存放在序列的起始位置,直到全部待排序的資料元素排完。 選擇排序是不穩定的排序方法(比如序列[5, 5, 3]第一次就將第乙個[5]與[3]交換,導致第乙個5挪動到第二個5後面)。

實現原理

對比陣列中前乙個元素跟後乙個元素的大小,如果後面的元素比前面的元素小則用乙個變數k來記住他的位置,接著第二次比較,前面「後乙個元素」現變成了「前乙個元素」,繼續跟他的「後乙個元素」進行比較如果後面的元素比他要小則用變數k記住它在陣列中的位置(下標),等到迴圈結束的時候,我們應該找到了最小的那個數的下標了,然後進行判斷,如果這個元素的下標不是第乙個元素的下標,就讓第乙個元素跟他交換一下值,這樣就找到整個陣列中最小的數了。然後找到陣列中第二小的數,讓他跟陣列中第二個元素交換一下值,以此類推。

時間複雜度

選擇排序的交換操作介於 0 和 (n - 1) 次之間。選擇排序的比較操作為 n (n - 1) / 2 次之間。選擇排序的賦值操作介於 0 和 3 (n - 1) 次之間。

比較次數o(n^2),比較次數與關鍵字的初始狀態無關,總的比較次數n=(n-1)+(n-2)+…+1=n*(n-1)/2。交換次數o(n),最好情況是,已經有序,交換0次;最壞情況交換n-1次,逆序交換n/2次。交換次數比氣泡排序少多了,由於交換所需cpu時間比比較所需的cpu時間多,n值較小時,選擇排序比氣泡排序快。

穩定性選擇排序是給每個位置選擇當前元素最小的,比如給第乙個位置選擇最小的,在剩餘元素裡面給第二個元素選擇第二小的,依次類推,直到第n-1個元素,第n個元素不用選擇了,因為只剩下它乙個最大的元素了。那麼,在一趟選擇,如果乙個元素比當前元素小,而該小的元素又出現在乙個和當前元素相等的元素後面,那麼交換後穩定性就被破壞了。比較拗口,舉個例子,序列5 8 5 2 9,我們知道第一遍選擇第1個元素5會和2交換,那麼原序列中兩個5的相對前後順序就被破壞了,所以選擇排序是乙個不穩定的排序演算法。

python

arr = [9,0,8,1,7,2,6,3,5,4]

def selectsort(arr,len):

for i in range(len) :

min = i

for j in range(i,len):

if arr[j] < arr[min]:

arr[j],arr[min] = arr[min],arr[j]

selectsort(arr,10)

print arr

選擇排序SelectSort

選擇排序 對氣泡排序的乙個改進 進行一趟排序時,不用每一次都交換,只需要把最大的標示記下 然後再進行一次交換 public class selectsort int temp resoucearr max resoucearr max resoucearr i resoucearr i temp p...

演算法 選擇排序(SelectSort)

選擇排序的思想 1 從陣列的開頭起,以第乙個元素作為初始比較物件,遍歷整個陣列,選擇出最小的元素放在陣列的第乙個位置 2 然後再從第二個元素開始,以第二個元素作為初始比較物件,遍歷未知順序的陣列部分,選擇出最小的元素放在陣列的第二個位置 3 對後面的元素分別重複上述步驟,直到所有的資料完成排序 選擇...

演算法 java 選擇排序selectSort

首先,找到陣列中最小的那個元素,其次,將它和陣列的第乙個元素交換位置 如果第乙個元素就是最小元素那麼它就和自己交換 再次,在剩下的元素中找到最小元素,將它與陣列的第二個元素交換位置。如此往復,直到將整個陣列排序。以下面5個無序的資料為例 56 12 80 91 20 文中僅細化了第一趟的選擇過程 第...