Python 選擇排序

2021-10-09 19:51:38 字數 2704 閱讀 8627

選擇排序(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

]print

(li)

select_sort(li)

print

(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 是一種簡單直觀的排序演算法。它的工作原理如下。首先在未排序序列中找到最小 大 元素,存放到排序序列的起始位置,然後,再從剩餘未排序元素中繼續尋找最小 大 元素,然後放到已排序序列的末尾。以此類推,直到所有元素均排序完畢。菜鳥教程的圖很清...