並べ替えアルゴリズム - 単純な選択並べ替え

序章

英語名: Select Sort は、
選択ソートの最も単純なアルゴリズムです。

ステップ

以下では、例として配列 2,5,8,3,6,9,1,4,7 を使用して、
小さいものから大きいものへと並べ替えます。

1. 未ソート部分で最小の数値を見つけます。
  • 最初は最初の故障から順に全て故障とみなされます

ここに画像の説明を挿入

  • 最小の数 1 を見つけます

ここに画像の説明を挿入

2. 見つかった最小の数字の位置を確認し、それが未ソート部分の最初の数字でない場合は、最初の数字と交換します。
  • 1 は最初ではないので、2 に置き換えます。

ここに画像の説明を挿入ここに画像の説明を挿入

3. すべての数値が並べ替えられるまで、最初の 2 つの手順を繰り返します。
  • 1が配置されたので、次のステップは2番目の番号からのランダムな部分です、2番目の番号から最初の2つのステップを繰り返します
    ここに画像の説明を挿入

  • 最小の数 2 を見つけます

ここに画像の説明を挿入

  • 前の番号と交換する

ここに画像の説明を挿入
ここに画像の説明を挿入

  • 続く

ここに画像の説明を挿入

次の手順も非常に簡単ですが、現在は省略されています。

コード

  • まず、各数値を配置するために n-1 回の走査を実行する必要があります (順序付けせずに最後の数値のみが残ります)。
  • k を使用して、現在の不規則な部分の最小数の下付き文字を記録します。
  • 2 番目の数値からトラバースを開始して最小の数値を見つけ、それを k でマークされた数値と比較します。
  • 最小の添字がランダムな順序で最初でない場合は、2 つの数値を交換します
#include<bits/stdc++.h>

using namespace std;

void SelectSort(int a[],int len)
{
    
    
    int k;
    for(int i=0;i<len-1;i++)//未排序第一个数
    {
    
    
        k=i;//取第一个数
        for(int j=i+1;j<len;j++)//遍历未排序部分
            if(a[j]<a[k])
                k=j;//取更小
        if(i!=k)//不在未排序第一的位置
            swap(a[k],a[i]);
        for(int t=0;t<len;t++)
            cout<<a[t]<<" ";
        cout<<endl;
    }
}


int main()
{
    
    
    int a[9]={
    
    2,5,8,3,6,9,1,4,7};
    int len=9;
    SelectSort(a,len);

    return 0;
}




特性

1. 時間計算量

O ( n 2 ) O(n^2)O ( n2 )

2. 空間の複雑さ

平均空間複雑度は次のとおりです: O ( 1 ) O(1)

3. アルゴリズムの安定性

同じ要素の順序は変わりますか?
非常に簡単な例を挙げてください
ここに画像の説明を挿入

上の図では、青 1 が青 2 と交換され、2 つの 2 の前後の位置が直接変更されます。

単純な選択ソートのソートが不安定なので

クイズ

久しぶりのクイズ

古いルールは、最小数を前に変更し、最大数を後ろに変更します。

ここに画像の説明を挿入

チョンチョンチョンψ(`∇´)ψ

おすすめ

転載: blog.csdn.net/qq_44616044/article/details/116496501