選擇排序 python實現

2021-10-23 01:24:15 字數 2678 閱讀 1612

選擇排序(select sorting)也是一種簡單的排序方法。它的基本思想是:第一次從arr[0]arr[n-1]中選取最小值,與arr[0]交換,第二次從arr[1]arr[n-1]中選取最小值,與arr[1]交換,第三次從arr[2]arr[n-1]中選取最小值,與arr[2]交換,…,第i次從arr[i-1]arr[n-1]中選取最小值,與arr[i-1]交換,…, 第n-1次從arr[n-2]~arr[n-1]中選取最小值,與arr[n-2]交換,總共通過n-1次,得到乙個按排序碼從小到大排列的有序序列。

選擇排序思路分析圖

通過這張圖,可以看出:

選擇排序演算法讓資料的第乙個位置作為最小值的儲存空間,也就是假設第乙個數就是最小值。你的首要目標是先找出在第二個到最後這段數字中的最小值,並且記錄這個最小值的下標和大小。然後和當前的第乙個位置進行交換,注意當前的第乙個位置會隨著交換操作向右移動,因為前面交換過的最小值肯定小於後面尋找到的最小值。

總的來說,就三步

1)假設資料第乙個的下標和值為最小值下標、最小值大小

2)遍歷所有資料判斷假設是否成立,若不成立,則互相交換位置

3)交換位置之前先判斷是否就是頭部,若是,則無需交換

#no1   假定最小值下標和值

index =

0 #假定此為最小值的下標

minn = arr[

0] #假定最小值為第乙個數的值

#no2 找到最小值和最小值下標

for j in range(1

,len

(arr)):

if minn > arr[j]

:#假設錯誤,並不是最小

minn = arr[j]#重新給這兩變數賦值

minindex = j

#no3 將最小值放到第乙個位置

if(minindex != i)

arr[minindex]

= arr[0]

arr[0]

= minn

選擇排序的時間效率相比氣泡排序顯得快速很多,下面的**裡面我把資料量調整到了8000個,在我的電腦上執行時間為5秒。雖然還是很慢哈,電腦硬體問題,但是相比氣泡排序的13秒還是快了很多。

執行結果如圖所示

完整**如下:

import time

import random

arr =[0

for i in

range

(8000)]

for i in

range

(8000):

arr[i]

=random.randint(0,

8000

)def

selectsort

(arr)

:#先簡單後複雜

''' #no1 假定最小值下標和值

index = 0 #假定此為最小值的下標

minn = arr[0] #假定最小值為第乙個數的值

#no2 找到最小值和最小值下標

for j in range(1,len(arr)):

if minn > arr[j]:#假設錯誤,並不是最小

minn = arr[j]#重新給這兩變數賦值

minindex = j

#no3 將最小值放到第乙個位置

if(minindex != i)

arr[minindex] = arr[0]

arr[0] = minn

'''#後面就是重複

for i in

range

(len

(arr)-1

):#no1 假定最小值

minindex = i

minn = arr[minindex]

#no2 尋找最小值

#因為假定頭為最小值,所以從i+1開始和i比較

for j in

range

(i+1

,len

(arr)):

if minn > arr[j]

: minn = arr[j]

minindex = j

#no3 把最小值放到頭部

#交換之前先判斷最小值是否就是第乙個數

if minindex != i:

arr[minindex]

= arr[i]

arr[i]

= minn

print

("原來的陣列"

)print

(arr)

print

(time.strftime(

"%y-%m-%d %h:%m:%s"

,time.localtime())

)selectsort(arr)

print

(time.strftime(

"%y-%m-%d %h:%m:%s"

,time.localtime())

)print

('排序後:'

)print

(arr)

Python實現選擇排序

選擇排序 一種簡單直觀的排序演算法。工作原理 首先在未排序序列中找到最小 大 元素,存放到排序序列的起始位置,然後,再從剩餘的未排序的元素中繼續尋找最小 大 元素,然後放到已排序的末尾。直到所有元素均排序完畢。優點 選擇排序與資料移動有關。如果某個元素位於正確的最終位置上,則它不會被移動。選擇排序每...

Python實現選擇排序

實現思路 將乙個序列分為兩部分,前面是有序序列,後面是無序序列,不斷的將後面的無序序列中的最小值新增到前面的有序序列中,直到後面的無序序列中沒有值,開始的時候將第乙個值作為有序序列。實現 arr 7,4,3,67,34,1,8 length 7 defselect sort arr n len ar...

python實現選擇排序

選擇排序 selection sort 是一種簡單直觀的排序演算法。它的工作原理如下。首先在未排序序列中找到最小 大 元素,存放到排序序列的起始位置,然後,再從剩餘未排序元素中繼續尋找最小 大 元素,然後放到已排序序列的末尾。以此類推,直到所有元素均排序完畢。選擇排序的主要優點與資料移動有關。如果某...