演算法篇 選擇排序演算法

2021-08-25 05:35:23 字數 1293 閱讀 5064

嘿嘿,不要怪我啦,別的都看不懂,就從最基本的開始講解!

選擇排序演算法思想

首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然後,再從剩餘的未排序的元素中繼續尋找最小(大)元素,然後放到已排序的末尾。直到所有元素均排序完畢。

**實現

對於乙個無序的序列我們可以通過n-1趟排序得到排序結果。

我們定義乙個無序序列list[r0…….rn]

step1.找出迴圈次數,列表的長度-1

step2.將當前的數字下標索引定成目標,與下面的每乙個數進行比較

step3.根據比較的結果決定位置的互換

import random

defselection_sort

(list):

for i in range(0,len(list)-1):#第一趟迴圈次數

min = i #設定暫時最小值為無序區間第乙個元素

for j in range(i+1,len(list)):#第二趟排序讓min去和無序數列的數作比較找出真正最小值

if list[min] > list[j]:

min = j

list[min],list[i] = list[i],list[min]

return list

if __name__ == '__main__':

list = [45,32,67,8,2,43]

print(selection_sort(list))

b = [random.randint(1,1000) for i in range(100)]

print(selection_sort(b))

時間複雜度選擇排序的複雜度分析。第一次內迴圈比較n - 1次,然後是n-2次,n-3次,……,最後一次內迴圈比較1次。

共比較的次數是 (n - 1) + (n - 2) + … + 1,求等差數列和,得 (n - 1 + 1) n / 2 = n^2 / 2。

捨去最高項係數,其時間複雜度為 o(n^2)。

雖然選擇排序和氣泡排序的時間複雜度一樣,但實際上,選擇排序進行的交換操作很少,最多會發生 n - 1次交換。

而氣泡排序最壞的情況下要發生n^2 /2交換操作。從這個意義上講,交換排序的效能略優於氣泡排序。而且,交換排序比氣泡排序的思想更加直觀。

python 演算法篇 選擇排序

選擇排序邏輯 第一次從待排序的列表中選出最小的乙個元素,存放在序列的起始位置,然後再從剩餘的未排序元素中尋找到最小元素,然後放到已排序的序列的末尾。以此類推,直到全部待排序的資料元素的個數為零 舉例說明 1,2,3進行比較,需要1和2比,1和3比,2和3比,3不需要在和其他數字進行比較,比較完成。例...

演算法篇 插入排序和選擇排序演算法

假設我們輸入的是 5,1,4,2,3 我們從第二個數字開始,這個數字是1,我們的任務只要看看1有沒有正確的位置,我們的做法是和這個數字左邊的數字來比,因此我們比較1和5,1比5小,所以我們就交換1和5,原來的排列就變成了 1,5,4,2,3 接下來,我們看第3個數字有沒有在正確的位置。這個數字是4,...

java演算法篇 插入排序和選擇排序演算法

假設我們輸入的是 5,1,4,2,3 我們從第二個數字開始,這個數字是1,我們的任務只要看看1有沒有正確的位置,我們的做法是和這個數字左邊的數字來比,因此我們比較1和5,1比5小,所以我們就交換1和5,原來的排列就變成了 1,5,4,2,3 接下來,我們看第3個數字有沒有在正確的位置。這個數字是4,...