嘿嘿,不要怪我啦,別的都看不懂,就從最基本的開始講解!
選擇排序演算法思想
首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然後,再從剩餘的未排序的元素中繼續尋找最小(大)元素,然後放到已排序的末尾。直到所有元素均排序完畢。
**實現
對於乙個無序的序列我們可以通過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,...