是一種簡單直觀的排序演算法。它的工作原理是每一次從待排序的資料元素中選出最小(或最大)的乙個元素,存放在序列的起始位置,直到全部待排序的資料元素排完。 選擇排序是不穩定的排序方法。
穩定性的概念:在排序過程中,相同元素的順序在排序完成後順序依然不發生變化
選擇排序相對於氣泡排序的來說是不穩定的
當選擇排序在(公升序每次選擇最大的情況下)是有可能發生不穩定的情況的
思路:1.給定乙個下標,記錄每次排序的最小值(1~n-1)
2.排序過程中,用記錄的最小值的下標去和其他元素相比較,如果其他元素是較小值,重新記錄下標值
3.在一輪排序完成後將初始下標值的元素和最終得到的最小值下標的元素交換位置,然後開始下一輪的排序
4.一共需要執行(0~n-2)次排序
def selection_sort(alist):
n = len(alist)
for j in range(n-1):
min_index = j
for i in range(j+1, n):
if alist[min_index] > alist[i]:
min_index = i
alist[j],alist[min_index] = alist[min_index],alist[j]
return alist
if __name__ == '__main__':
li = [1, 3, 4, 2, 9, 5, 8]
print(li)
selection_sort(li)
print(li)
注意range左開右閉,要分析個數
選擇排序的時間複雜度都是o(n**2),沒有最優解
感覺python中min和max的方法可以就是根據這個內部封裝的
def min(alist):
n = len(alist)
min_index = 0
for i in range( 1, n):
if alist[min_index] > alist[i]:
min_index = i
alist[0], alist[min_index] = alist[min_index], alist[0]
return alist[0]
Python實現選擇排序
選擇排序 一種簡單直觀的排序演算法。工作原理 首先在未排序序列中找到最小 大 元素,存放到排序序列的起始位置,然後,再從剩餘的未排序的元素中繼續尋找最小 大 元素,然後放到已排序的末尾。直到所有元素均排序完畢。優點 選擇排序與資料移動有關。如果某個元素位於正確的最終位置上,則它不會被移動。選擇排序每...
Python實現選擇排序
實現思路 將乙個序列分為兩部分,前面是有序序列,後面是無序序列,不斷的將後面的無序序列中的最小值新增到前面的有序序列中,直到後面的無序序列中沒有值,開始的時候將第乙個值作為有序序列。實現 arr 7,4,3,67,34,1,8 length 7 defselect sort arr n len ar...
python實現選擇排序
選擇排序 selection sort 是一種簡單直觀的排序演算法。它的工作原理如下。首先在未排序序列中找到最小 大 元素,存放到排序序列的起始位置,然後,再從剩餘未排序元素中繼續尋找最小 大 元素,然後放到已排序序列的末尾。以此類推,直到所有元素均排序完畢。選擇排序的主要優點與資料移動有關。如果某...