演算法與資料結構(選擇排序)

2021-10-05 15:02:24 字數 1811 閱讀 2490

從待排序序列中選出最小(或最大)元素,放入新建的有序序列中,並將其從原無序序列移除。不斷重複直到無序序列最終沒有元素剩餘

選擇排序規則:總共要進行 n-1 次迴圈

每一輪迴圈中又巢狀了一層迴圈–從第乙個元素遍歷到最後乙個,找出最小元素

實現:

從無序序列中找到最小元素,將其和無序序列首位的元素交換(此時首位元素屬於有序序列,剩下的元素屬於無序序列)

重複步驟,直到無序序列沒有元素剩餘

}// 將最小值和隊首元素交換

if(minindex != i)

}// 列印

for(

int i=

0; i< arr.length; i++

)}時間複雜度分析:平均時間複雜度:t(n

)=n−

1+n−

2+⋯+

2+1=

n(n−

1)2=

o(n2

)t(n) = n-1 + n-2 + \dots + 2 + 1 = \frac = o(n^2)

t(n)=n

−1+n

−2+⋯

+2+1

=2n(

n−1)

​=o(

n2)

最優時間複雜度:列表正序,依然需要遍歷列表全部比較,所以還是 o(n

2)o(n^2)

o(n2)

最壞時間複雜度:列表倒序,需要遍歷列表全部比較,因此為 o(n

2)o(n^2)

o(n2

)空間複雜度:

由於只用到了常數個臨時變數,且這個常數和序列大小無關,所以空間複雜度為 o(1

)o(1)

o(1)

穩定性:

在選擇排序的過程中,可能出現等值元素順序交換的情況,例如:

列表 [ 5, 3, 4, 6, 5, 2],在排序時會將 2 和 第乙個 5 交換,此時兩個 5 的順序改變

所以選擇排序是不穩定的

相關章節

第一節 簡述

第二節 稀疏陣列 sparse array

第三節 佇列 queue

第四節 單鏈表 single linked list

第五節 雙向鍊錶 double linked list

第六節 單向環形鍊錶 circular linked list

第七節 棧 stack

第八節 遞迴 recursion

第九節 時間複雜度 time complexity

第十節 排序演算法 sort algorithm

第十一節 氣泡排序 bubble sort

第十二節 選擇排序 select sort

第十三節 插入排序 insertion sort

第十四節 氣泡排序,選擇排序和插入排序的總結

第十五節 希爾排序 shell』s sort

第十六節 快速排序 quick sort

第十七節 歸併排序 merge sort

資料結構與演算法 排序 選擇排序

資料結構與演算法 排序 選擇排序 sort selectsort include includevoid selectsort int list,int len if print list,len for selectsort int minkey int list,int i,int len if...

資料結構與演算法 選擇排序

選擇排序 從小到大 的基本思想是,首先,選出最小的數,放在第乙個位置 然後,選出第二小的數,放在第二個位置 以此類推,直到所有的數從小到大排序。在實現上,我們通常是先確定第i小的數所在的位置,然後,將其與第i個數進行交換。下面,以對 3 2 4 1 進行選擇排序說明排序過程,使用min index ...

資料結構與演算法 選擇排序

1 什麼是程式?程式 資料結構 演算法 2 選擇排序 selection sort 基本思想 我們從第乙個位置開始,依次和後面的值進行比較,如找到比第乙個值小的,二者進行交換。交換後第乙個位置的值已經確定下來,我們再從第二個位置開始,依次和後面的進行比較,依次類推,知道所有的值都比較完成,到此選擇排...