原創 演算法 python 選擇排序

2021-07-29 02:57:53 字數 2295 閱讀 2885

選擇排序 原理

從左至右遍歷,找到最小(大)的元素,然後與第乙個元素交換。

從剩餘未排序元素中繼續尋找最小(大)元素,同第二個元素進行交換。

以此類推,直到所有元素均排序完畢。

原理圖圖1: 

圖2: 

選擇排序需要花費 (n – 1) + (n – 2) + … + 1 + 0 = n(n- 1) / 2 ~ n2/2次比較 和 n-1次交換操作。

對初始資料不敏感,不管初始的資料有沒有排好序,都需要經歷n2/2次比較,這對於一些原本排好序,或者近似排好序的序列來說並不具有優勢。在最好的情況下,即所有的排好序,需要0次交換,最差的情況,倒序,需要n-1次交換。

資料交換的次數較少,如果某個元素位於正確的最終位置上,則它不會被移動。在最差情況下也只需要進行n-1次資料交換,在所有的完全依靠交換去移動元素的排序方法中,選擇排序屬於比較好的一種。

python**實現:

def

sort_choice

(numbers, max_to_min=true):

""" 我這沒有按照標準的選擇排序,假設列表長度為n,思路如下:

1、獲取最大值x,將x移動到列最後。[n1, n2, n3, ... nn]

2、將x追加到排序結果[n1, n3, ... nn, n2]

3、獲取排序後n-1個元素[n1, n3, ... nn],重複第一步,重複n-1次。

max_to_min是指從大到小排序,預設為true;否則從小到大排序。

對[8, 4, 1, 0, 9]排序,大致流程如下:

sorted_numbers =

[8, 4, 1, 0, 9], sorted_numbers = [9]

[4, 1, 0, 8], sorted_numbers = [9, 8]

[1, 0, 4], sorted_numbers = [9, 8, 4]

[0, 1], sorted_numbers = [9, 8, 4, 1]

[0], sorted_numbers = [9, 8, 4, 1, 0]

"""if len(numbers) <= 1:

return numbers

sorted_list =

index = 0

for i in xrange(len(numbers) - index):

left_numbers = _get_left_numbers(numbers, max_to_min)

numbers = left_numbers[:-1]

index += 1

return sorted_list

def_get_left_numbers

(numbers, get_max=true):

''' 獲取最大值或者最小值x,並且將x抽取出來,置於列表最後.

ex: get_max=true, [1, 4, 3] ⇒ [1, 3, 4]

get_max=false, [1, 4, 3] ⇒ [4, 3 ,1]

'''max_index = 0

for i, num in enumerate(numbers):

if get_max:

if num > numbers[max_index]:

max_index = i

else:

if num < numbers[max_index]:

max_index = i

numbers = numbers[:max_index] + numbers[max_index + 1:] + [numbers[max_index]]

return numbers

測試一下:

>>> get_left_numbers([0, 4, 0, 31, 9, 19, 89,67], get_max=true)

[0, 4, 0, 31, 9, 19, 67, 89]

>>> get_left_numbers([0, 4, 0, 31, 9, 19, 89,67], get_max=false)

[4, 0, 31, 9, 19, 89, 67, 0]

>>> sort_choice([0, 4, 0, 31, 9, 19, 89,67], max_to_min=false)

[0, 0, 4, 9, 19, 31, 67, 89]

>>> sort_choice([0, 4, 0, 31, 9, 19, 89,67], max_to_min=true)

[89, 67, 31, 19, 9, 4, 0, 0]

python 排序演算法 選擇排序

所謂選擇排序,它是排序演算法中,一種簡單 直觀且靈巧的排序演算法,但是速度不是很快。選擇排序,見名思意就是選擇乙個元素,與其他元素進行比較,將乙個個的最大或最小值拿出來,放到另乙個列表中的這個過程,或者說行為我們稱之為選擇排序。1 首先得有乙個需要排序的列表,比如數字列表 2 拿到這個列表以後,我們...

Python 演算法 選擇排序

coding utf 8 選擇排序 defselect sort lst 基本思想 第1趟,在待排序記錄r1 r n 中選出最小的記錄,將它與r1交換 第2趟,在待排序記錄r2 r n 中選出最小的記錄,將它與r2交換 以此類推,第i趟在待排序記錄r i r n 中選出最小的記錄,將它與r i 交換...

python演算法 選擇排序

眾所周知,我們記憶體的工作原理就像我們逛商場時的存物櫃,每個櫃子只能放進乙個物品,你有兩樣物品要存,將物品存進 放進 櫃子裡後,你就可以去逛商場了 計算機就是多個櫃子的集合,每個單獨的櫃子都有自己的位址 而當我們需要存多個資料的時候,我們有兩種基本方式 陣列和鍊錶 我們還是拿我們的日常生活舉個栗子,...