挑戰程式設計競賽選讀-選擇排序
初等排序
選擇排序
選擇排序的基本思想是,在未排序序列中找到最小的那個元素,然後將它與未排序序列的首元素交換,如此以來,整個序列便逐漸歸於有序。
正確性:其正確性顯而易見。
複雜度:在排序過程中,主要耗時在尋找待排序列的最小元素上,且若待排序列元素個數為
N
N
N ,則每次需進行
N
−
1
,
N
−
2
,
…
,
1
N-1,N-2,\dots,1
N−1,N−2,…,1次比較,總的時間複雜度為
N
−
1
+
N
−
2
+
⋯
+
1
=
N
(
N
−
1
)
2
=
O
(
N
2
)
N-1+N-2+\dots+1=\frac{N(N-1)}{2}=O(N^2)
N−1+N−2+⋯+1=2N(N−1)=O(N2)
即選擇排序的時間複雜度也為
O
(
N
2
)
O(N^2)
O(N2)級。
排序圖解:
C++實現:
void selectSort(vector<int> &a)
{
size_t length = a.size();
for(size_t i = 0;i < length-1;i++)
{
int v = a[i];
int min_v = v; //記錄最小值,並把它初始化為未派序列的第一個元素
int min_l = i; //記錄最小值所在位置
for(size_t j = i;j < length;j++)
{
if(min_v > a[j])
{
min_v = a[j];
min_l = j;
}
}
a[i] = min_v;
a[min_l] = v;
trace(a);
}
}
C++實現(利用STL):
void selectSort_STL(vector<int> &a)
{
for(auto i = a.begin();i!=a.end();++i)
{
size_t min_l;
for(auto j = i;j!=a.end();++j)
{
auto min = min_element(i,a.end());
min_l = distance(a.begin(),min);
}
swap(*i,a[min_l]);
trace(a);
}
}
rust實現(待更新):
相關文章
- 壹電競群英挑戰賽海選賽結束 共同期待積分賽
- 選擇排序排序
- 選擇結構程式設計程式設計
- js選擇排序JS排序
- 01選擇排序排序
- 選擇排序法排序
- Java 選擇排序Java排序
- 程式設計競賽中讀檔案技能程式設計
- 選擇排序和快速排序排序
- 家屬感言:選擇程式設計師,就是選擇一種生活程式設計師
- 雲原生程式設計挑戰賽火熱開賽,51 萬獎金等你來挑戰!程式設計
- 排序演算法:選擇排序排序演算法
- 排序演算法__選擇排序排序演算法
- 選擇排序和氣泡排序排序
- 氣泡排序與選擇排序排序
- 桶排序 選擇,插入排序排序
- 陣列選擇排序陣列排序
- C# 選擇排序C#排序
- 簡單選擇排序排序
- 無錫學院2024年ACM大學生程式設計競賽校選賽 題解ACM程式設計
- 選擇結構程式設計之習題程式設計
- 排序——選擇排序小練習(二)排序
- 排序——選擇排序小練習(一)排序
- 經典排序之選擇排序(Java)排序Java
- 選擇排序(python)實現排序Python
- Java程式設計師: 選擇比努力更重要Java程式設計師
- 程式設計師,選擇和努力哪個重要?程式設計師
- 卡頌:30歲程式設計師選擇躺平程式設計師
- 圖解選擇排序與插入排序圖解排序
- 氣泡排序和選擇排序流程圖排序流程圖
- PHP 排序演算法之選擇排序PHP排序演算法
- Python排序演算法之 選擇排序Python排序演算法
- 排序演算法入門:選擇排序排序演算法
- 氣泡排序和選擇排序詳解排序
- 排序演算法之「選擇排序(SelectionSort) 」排序演算法
- 挑選方案問題(牛客競賽 思維題+推導公式)公式
- 程式猿修仙之路--演算法之選擇排序演算法排序
- 排序演算法 - 氣泡排序和選擇排序排序演算法