選擇排序(selection sort)是一種簡單直觀的排序演算法。它的工作原理如下。首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然後,再從剩餘未排序元素中繼續尋找最小(大)元素,然後放到已排序序列的末尾。以此類推,直到所有元素均排序完畢。
選擇排序的主要優點與資料移動有關。如果某個元素位於正確的最終位置上,則它不會被移動。選擇排序每次交換一對元素,它們當中至少有乙個將被移到其最終位置上,因此對n個元素的表進行排序總共進行至多n-1次交換。在所有的完全依靠交換去移動元素的排序方法中,選擇排序屬於非常好的一種。
主要思路就是遍歷數列一遍找到最大的值,然後和最後的元素進行交換,當第二次遍歷時,和n-2的位置的元素進行交換;
如這樣的效果圖:
#@file:選擇排序及實現.py
#@software:pycharm
defselect_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]
if __name__ ==
'__main__'
: li =[54
,26,93
,17,77
,31,44
,55,20
(li)
select_sort(li)
(li)
# 返回[17, 20, 26, 31, 44, 54, 55, 77, 93]
for j in range(n-1) 是因為在數列的遍歷過程中,走到最後倒數第乙個元素已經放到了最後,所以是定位到n-2的位置,,所以for i in range(n-1);
for i in range(j+1,n) 是因為當:
j=0時,min_index的對比就是 0和0+1之後的對比;
j=1時,min_index的對比就是 1和1+1之後的對比;
j=2時,min_index的對比就是 2和2+1之後的對比;
所以 for i in range(j+1,n),一直到n-1個位。
其**現的錯誤點:
#coding=utf-8
#@time:2020/9/27 10:00
#@author:csdn@hijacklei
#@file:選擇排序及實現.py
#@software:pycharm
defselect_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]
#這裡是錯誤點
if __name__ ==
'__main__'
: li =[54
,26,93
,17,77
,31,44
,55,20
]print
(li)
select_sort(li)
print
(li)
# [20, 17, 26, 31, 55, 44, 77, 54, 93]
錯誤點在上面標出來了,是因為進行交換的時候是在外層的迴圈完成之後再進行交換,所以縮排的問題是導致最後的返回結果是[20, 17, 26, 31, 55, 44, 77, 54, 93]
按照迴圈表示:
for j in
range
(n-1):
min_index=j
for i in
range
(j+1
,n):
if alist[min_index]
>alist[i]
:
外層迴圈的執行為n-1;
內層迴圈的執行為1-n,2-n,3-n…,所以是每次執行n-1,n-2,n-3…
所以時間複雜度為o(n*n)
Python 選擇排序
coding utf 8 選擇排序 在所有記錄中選擇最小的乙個元素,與第乙個記錄交換,依次,在其餘的記錄中選擇最小的元素與第二個元素交換 def sellectsort list list 4,1,9,13,34,26,10,7,4 m len list if m 2 如果是空表或只有乙個元素,返回...
python選擇排序
選擇排序是不穩定的排序方法 比如序列 5,5,3 第一次就將第乙個 5 與 3 交換,導致第乙個5挪動到第二個5後面 data set 9,1,22,31,45,3,6,2,11 smallest num index 0 初始列表最小值,預設為第乙個 loop count 0 for j in ra...
選擇排序python
python 選擇排序 選擇排序 selection sort 是一種簡單直觀的排序演算法。它的工作原理如下。首先在未排序序列中找到最小 大 元素,存放到排序序列的起始位置,然後,再從剩餘未排序元素中繼續尋找最小 大 元素,然後放到已排序序列的末尾。以此類推,直到所有元素均排序完畢。菜鳥教程的圖很清...