挑戰程式設計競賽選讀-選擇排序
初等排序
選擇排序
選擇排序的基本思想是,在未排序序列中找到最小的那個元素,然後將它與未排序序列的首元素交換,如此以來,整個序列便逐漸歸於有序。
正確性:其正確性顯而易見。
複雜度:在排序過程中,主要耗時在尋找待排序列的最小元素上,且若待排序列元素個數為
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實現(待更新):
相關文章
- 筆記:《挑戰程式設計競賽(第2版)》(2)筆記程式設計
- 筆記:《挑戰程式設計競賽(第2版)》(3)筆記程式設計
- 筆記:《挑戰程式設計競賽(第2版)》(1)筆記程式設計
- Coco學程式設計(二)--直接選擇排序 (轉)程式設計排序
- 選擇排序排序
- 排序之選擇排序排序
- 選擇結構程式設計程式設計
- 程式設計師:選擇效率,還是選擇質量?程式設計師
- 程式設計競賽中讀檔案技能程式設計
- 谷歌欲通過競賽挑選Google Glass測試者谷歌Go
- js選擇排序JS排序
- Java 選擇排序Java排序
- [java]選擇排序Java排序
- 01選擇排序排序
- 選擇排序法排序
- 雲原生程式設計挑戰賽火熱開賽,51 萬獎金等你來挑戰!程式設計
- 選擇排序和快速排序排序
- 《挑戰程式設計競賽(第2版)》譯者訪談問題有獎徵集程式設計
- 家屬感言:選擇程式設計師,就是選擇一種生活程式設計師
- 程式設計挑戰程式設計
- C# 選擇排序C#排序
- 陣列選擇排序陣列排序
- 簡單選擇排序排序
- 排序演算法__選擇排序排序演算法
- 排序演算法:選擇排序排序演算法
- 選擇排序和氣泡排序排序
- 氣泡排序與選擇排序排序
- 氣泡排序和選擇排序排序
- 選擇排序和插入排序排序
- 桶排序 選擇,插入排序排序
- 程式設計師如何選擇程式設計技術書?程式設計師
- 挑選方案問題(牛客競賽 思維題+推導公式)公式
- 某大學程式設計競賽程式設計
- 遊戲的戰略(二)——選擇性的戰略與落地的挑戰遊戲
- 經典排序之選擇排序(Java)排序Java
- 排序——選擇排序小練習(二)排序
- 排序——選擇排序小練習(一)排序
- 查詢與排序03,選擇排序排序