質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%

解決済

C++選択ソートのコードの理解の間違い

jaogjig
jaogjig

総合スコア16

1回答

0評価

0クリップ

173閲覧

投稿2022/08/16 17:38

編集2022/08/17 19:03

前提

C++で選択ソートを勉強している時にどう動いているかわからなくなりました。
このコードだと一番小さい値を検索できていないと思ったのですが
コードを読む限りi番目とj(i+1番目の左右だけを検索しているように見えます。
実際にN=4
値を43、32、23、1の順番に入れました。自分の予想だと左右の比較をずらしながらやっていると考えたため、32、23、1、43と予想したのですが、1、23、32、43の順番で帰ってきました。
私がわからないのは「未ソート部分から最小値の位置を探し」の部分が私が上げたプログラムとどこに対応しているのか、とfor文の中にfor文とswap関数が入っていてどういう順番で動くのかがわかっていません。
私のどこのコードを読み間違えているかご指摘お願いします。

実現したいこと

-選択ソートのコードがどう動いているか理解したい

発生している問題・エラーメッセージ

#include <iostream> using namespace std; int N, A[200009]; int main() { // 入力 cin >> N; for (int i = 1; i <= N; i++) cin >> A[i]; // 選択ソート for (int i = 1; i <= N - 1; i++) { int Min = i, Min_Value = A[i]; for (int j = i + 1; j <= N; j++) { if (A[j] < Min_Value) { Min = j; // Min は最小値のインデックス(1~N) Min_Value = A[j]; // Min_Value は現時点での最小値 } } swap(A[i], A[Min]); } // 出力 for (int i = 1; i <= N; i++) cout << A[i] << endl; return 0; }

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

Crimson_Tide

2022/08/16 18:29

どのソートプログラムも最終的には1、23、32、43と返ってくるかと思いますが、 「32、23、1、43と予想した」というのは初回ループでの結果の話でしょうか? 「左右の比較をずらしながらやっている」バブルソートと勘違いしていないでしょうか? 選択ソートでぐぐれば、図解でわかりやすく解説しているサイトがいくつも見つかります。 そちらを確認されたほうが手っ取り早く理解も早いと思います。
jaogjig

2022/08/16 18:56

選択ソートは未ソート部分から最小値の位置を探し、その位置の要素と未ソート部分の先頭の要素を交換する。交換されて先頭にきたものはソート済みとすると考えています。私がわからないのは「未ソート部分から最小値の位置を探し」の部分が私が上げたプログラムとどこに対応しているのか、とfor文の中にfor文とswap関数が入っていてどういう順番で動くのかがわかっていません。
Crimson_Tide

2022/08/16 20:29

43、32、23、1がどういう推移で「32、23、1、43」となる想定なのか簡単に説明してもらえますか? 43と32を比較 入れ替え [32,43,23,1] 43と23を比較 入れ替え [32,23,43,1] 43と1を比較 入れ替え [32,23,1,43] ということでしょうか?

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る