1.選択ソートの概要
選択ソート(選択ソート)は、シンプルで直感的なソートアルゴリズムです。
その基本的な考え方は、最初にソートされていないシーケンスで最小(または最大)の要素を見つけ、次にそれをシーケンスの先頭に格納します。次に、残りのソートされていない要素から最小(または最大)の要素を見つけ続けます。ソートされたシーケンスの最後に配置します。など、すべての要素が並べ替えられるまで続きます。
2つ目は、グラフィックの説明の並べ替えを選択する
ソートコードを選択
/*
* 选择排序
* * 参数说明:
* a -- 待排序的数组
* n -- 数组的长度
*/
void select_sort(int a[], int n)
{
int i; // 有序区的末尾位置
int j; // 无序区的起始位置
int min; // 无序区中最小元素位置
for(i=0; i<n; i++)
{
min=i;
// 找出"a[i+1] ... a[n]"之间的最小元素,并赋值给min。
for(j=i+1; j<n; j++)
{
if(a[j] < a[min])
min=j;
}
// 若min!=i,则交换 a[i] 和 a[min]。
// 交换之后,保证了a[0] ... a[i] 之间的元素是有序的。
if(min != i)
swap(a[i], a[min]);
}
}
シーケンス{20,40,30,10,60,50}を例として取り上げて、その選択と並べ替えのプロセスを示しましょう(下の図を参照)。
ソートプロセス
- 初回:i = 0。a [1 ... 5]で最小値a [3] = 10を見つけ、a [0]とa [3]を入れ替えます。数列の変更:20,40,30,10,60,50-
> 10,40,30,20,60,50 - パス2:i = 1。a [2…5]で最小値a [3] = 20を見つけ、a [1]とa [3]を入れ替えます。数列の変更:10,40,30,20,60,50-
> 10,20,30,40,60,50 - 3回目:i = 2。a [3 ... 5]で最小値を見つけます。最小値はa [2]より大きいため、この旅行では何も行われません。
- ラウンド4:i = 3。a [4 ... 5]で最小値を見つけます。最小値はa [3]より大きいため、この旅行では何も行われません。
- ラウンド5:i = 4。a [4]とa [5]のデータを交換します。数列の変更:10,20,30,40,60,50-> 10,20,30,40,50,60
編集者は私自身のlinuxC / C ++言語技術交換グループを推奨しています:[1106675687]グループファイルで共有する方が良いと思う学習本とビデオ資料をいくつかまとめました。必要に応じて追加できます。
第三に、選択ソートの時間計算量と安定性
選択ソートの時間計算量選択ソートの時間計算量はO(N2)です。ソートされているシーケンスにN個の番号があるとします。トラバーサルの時間計算量はO(N)です。トラバーサルはいくつ必要ですか?N-1!したがって、選択ソートの時間計算量はO(N2)です。
選択的ソートの安定性
選択的ソートは安定したアルゴリズムであり、安定したアルゴリズムの定義を満たします。アルゴリズムの安定性-シーケンスにa [i] = a [j]があると仮定します。ソート前の場合、a [i]はa [j]の前にあり、ソート後、a [i]はまだa [j]の前にあります。そうすれば、このソートアルゴリズムは安定しています!
第四に、ソート実装を選択します
ソートC実装の選択
実装コード(select_sort.c)
View Code
Select Sort C ++実装
実装コード(SelectSort.cpp)
View Code
ソートJava実装
実装コード(SelectSort.java)を選択します
View Code
上記の3つの実装の原理と出力結果は同じです。それらの出力は次のとおりです。
before sort:20 40 30 10 60 50
after sort:10 20 30 40 50 60