Java ソートアルゴリズムの概要 (II): 選択ソート

Java ソートアルゴリズムの概要 (II): 選択ソート

選択ソートの基本的な操作は、ソートするデータ要素から毎回最小(または最大)の要素を選択し、ソートするすべてのデータ要素がソートされるまで、ソートされたシーケンスの最後に順番に配置することです。このアルゴリズムは不安定で、追加スペースが O(1)、比較に O(n^2) の時間計算量、スワップに O(n) の時間計算量があり、適応性がありません。ほとんどの場合は推奨されません。これは、スワップの数を減らしたい場合にのみ使用してください。

基本的な考え方

n 個のレコードを持つファイルの直接選択ソートは、n-1 個の直接選択ソートによってソートされ、順序付けられた結果を得ることができます。

①初期状態:順序付けされていない領域はR[1..n]であり、順序付けされた領域は空である。

②1次選別

順序付けられていない領域R[1..n]内で最小のキーワードを持つレコードR[k]を選択し、それを順序付けられていない領域の最初のレコードR[1]と交換します。これにより、R[1..1]とR[2..n]は、それぞれレコードが1つ多い新しい順序付けられた領域と、レコードが1つ少ない新しい順序付けられていない領域になります。

③ i番目のソート

i番目のソートが開始されると、現在の順序付けされた領域と順序付けされていない領域はそれぞれR[1..i-1]とR(1≤i≤n-1)になります。このソートパスは、現在の順序付けられていない領域から最小のキーワードを持つレコード R[k] を選択し、それを順序付けられていない領域の最初のレコード R と交換します。これにより、R[1..i] と R は、それぞれレコードが 1 つ多い新しい順序付けられた領域と、レコードが 1 つ少ない新しい順序付けられていない領域になります。

この方法では、n 個のレコードを持つファイルの直接選択ソートを n-1 回の直接選択ソートでソートして、順序付けられた結果を得ることができます。

コードの実装

  1. 公共 クラステスト{
  2. 公共 静的  int [] a = { 10 , 32 , 1 , 9 , 5 , 7 , 12 , 0 , 4 , 3 }; // プリセットデータ配列 
  3. 公共 静的  void main(文字列args[]) {
  4. int i; // ループカウント変数 
  5. int Index = a.length; // データインデックス変数 
  6. System.out.print( "ソート前: " );
  7. (i = 0 ; i < インデックス - 1 ; i++)の場合
  8. System.out.printf( "%3s" , a);
  9. System.out.println( "" );
  10. SelectSort(Index - 1 ); // 選択ソート 
  11. // ソートされた結果 
  12. System.out.print( "ソート後: " );
  13. (i = 0 ; i < インデックス - 1 ; i++)の場合
  14. System.out.printf( "%3s" , a);
  15. System.out.println( "" );
  16. }
  17. 公共 静的  void SelectSort( intインデックス) {
  18. int i, j, k; // ループカウント変数 
  19. int MinValue; // 最小値変数 
  20. int IndexMin; // 最小インデックス変数 
  21. int Temp; // 一時変数 
  22. ( i = 0 ; i < インデックス - 1 ; i++) {
  23. MinValue = 32767 ; //現在の最小値 
  24. IndexMin = 0 ; // 最小値のインデックス値を保存します 
  25. (j = i; j < Index; j++)の場合{
  26. if (a[j] < MinValue) // 最小値を見つける 
  27. {
  28. MinValue = a[j]; // 最小値を保存する 
  29. インデックス最小値 = j;
  30. }
  31. Temp = a; // 2つの値を交換する 
  32. ア = ア;
  33. a = 温度;
  34. }
  35. System.out.print( "ソート: " );
  36. (k = 0 ; k < インデックス; k++)の場合
  37. System.out.printf( "%3s" , a[k]);
  38. System.out.println( "" );
  39. }
  40. }
  41. }

選択ソート法はバブルソート法と同じです。最も外側のループは依然として n-1 回実行する必要があり、効率は依然として悪いです。

【編集者のおすすめ】

  1. 5.5.5 直接選択ソートの使用
  2. C# アルゴリズムの選択ソートの簡単な分析
  3. C++ ソートの 4 つの選択ソートによる古典的な 4 つの講義

<<:  Java ソートアルゴリズムの概要 (パート 3): バブル ソート

>>:  Javaソートアルゴリズムの概要(I):挿入ソート

ブログ    
ブログ    
ブログ    
ブログ    

推薦する

顔認識、今やアニメキャラクターも例外ではない

この記事はAI新メディアQuantum Bit(公開アカウントID:QbitAI)より許可を得て転載...

...

...

AIがマーケティングオーディエンスの洞察をどのように変えるのか

[[429813]]人工知能は、企業のマーケティング範囲の拡大に大きく貢献することが証明されています...

AIテクノロジーは法務サービスの未来をどのように変えるのでしょうか?

大規模な自然言語処理モデル(ChatGPT など)の急速な発展により、AI ツールは現在、調査、電子...

業界の未来を牽引する8つのデジタル変革トレンド

さらに、2024 年までに、産業企業は自己管理テクノロジーと再設計された運用プロセスを組み合わせるこ...

航空会社が AI を活用して乗客体験を向上させる方法

「おはようございます、ジョーンズさん。ロンドン・ガトウィック空港からパリへの『ニューノーマル』フライ...

引退した中国人女性のAIによるイラストがWeiboで話題に! 「バカなガチョウの王様」とハッピー・パピーがGPT-4の想像力の限界に挑戦

AIの創造性の限界は何でしょうか?最近、ネットユーザーは、GPT-4 に適切なタイミングで PUA ...

人工知能がやって来ます。準備はできていますか?

ちょうど2年前、大学に入学したときに一度だけ行ったことがあります。その時は、まず入り口の機械で番号を...

AIが仕事や生活を奪ったら、人類の未来はどうなるのでしょうか?

AIの発展は、人間の仕事の効率を向上させ、人間の働き方を変え、さらには人類の発展の方向を導く上で大...

無人配送はJD.com、Alibaba、SF Expressの「新たなお気に入り」となっているが、全国的に普及するには10年かかるかもしれない!

[[222058]]無人運転車、ドローン、無人倉庫、無人駅、配達ロボットなどの「無人技術」が、電子...

Panda-Gym のロボットアームシミュレーションを使用したディープ Q 学習強化学習

強化学習 (RL) は、エージェントが試行錯誤を通じて環境内でどのように動作するかを学習できるように...

...

新しい研究:医療AIが新たな統合失調症患者の治療効果をほぼ盲検で評価

1月12日、新たな研究により、統合失調症患者の治療で医師を支援するために使用されるコンピューターアル...