📕 選択ソート.
📌選択ソートの特徴.
- 安定なソートアルゴリズムだが計算量O(nの2乗)となる.
📌選択ソートの手順.
挿入、バブルソート同様に[ソート済みの部分列]と[未ソートの部分列]に分けられる.
以下の処理をN-1回繰り返す.
1️⃣ 未ソート部分列から最小の要素の位置minjを特定.
2️⃣ minjの位置にある要素と未ソート部分の先頭要素を交換.
#include <iostream>
using namespace std;
// 選択ソート
void selection(int A[], int N) {
int minj, tmp;
// i:未ソート部分の先頭を表すループ変数
// 配列Aの先頭から末尾に向けて移動.
for (int i = 0; i < N - 1; i++) {
// 各ループ処理でi番目からN-1番目迄の要素で最小要素の位置.
minj = i;
// j:未ソート部分から最小要素の位置(minj)を探すためのループ変数.
for (int j = i; j < N; j++) {
// minjの隣り合う要素がminj要素より小さければminjを入れ替える.
if (A[j] < A[minj]) {
minj = j;
}
}
// 未ソート部分の先頭(i)要素は一時領域へ.
tmp = A[i];
// 未ソート部分の最小要素(minj)と未ソート部分の先頭要素を入れ替える.
A[i] = A[minj];
A[minj] = tmp;
}
}
🔎対象ソースは以下に格納.
/source/1.sort/select.cpp