1. test 1
  2. test 2
  3. test 3
  4. test 4
  5. test 5
コース一覧
アルゴリズム道場 カメ師範の十の巻
第三の巻 バブルソート

アルゴリズム道場 カメ師範の十の巻

言語を問わず、考え方だけを問う演習専用コースです。解説はありません。巻物と完成条件だけを読み、白紙から自分で組み立てます。Python・JavaScript・TypeScript・Java のどれで解いても構いません。手が止まったときのために、方針・使う構文・部分解の3段階のヒントを各問に用意しています。総和と最大から始まり、線形探索、整列、二分探索、再帰、スタックとキューを経て、最後は初見の疑似コードを読み解いて実装するところまで、10問でアルゴリズムの基礎を一巡します。1問15分から45分、全10問で約5時間です。いずれかの言語の入門を終えて「動くものは書けるが、考え方に自信がない」と感じている方に向いています。

1
初段
01. 第一の巻 総和と最大15分
02. 第二の巻 線形探索15分
03. 第三の巻 バブルソート20分
04. 第四の巻 二分探索25分
2
中段
01. 第五の巻 整列の途中経過25分
02. 第六の巻 再帰25分
03. 第七の巻 スタックを作れ30分
04. 第八の巻 キューを作れ30分
3
師範
01. 第九の巻 計算量を体感せよ35分
02. 免許皆伝 初見の巻物45分

第三の巻 バブルソート

初段 / 目安 20分

三つめの巻物です。師範が広げると、そこには売上の数字がばらばらの順で並んでいました。「売上を小さい順に並べよ。隣同士を比べ、逆なら入れ替える——古より伝わる泡の技で」

泡の技、つまりバブルソートです。名前の由来は、大きい値が水中の泡のように末尾へ浮かんでいく(あるいは沈んでいく)ように見えるところにあります。速い並べ替えではありません。それでも師範がこれを最初に指すのは、並べ替えという仕事の骨格が、この技にいちばん素直に出ているからです。

並べ替えの関数は、どの言語にも最初から入っています。第一の巻と同じく、ここではそれを使いません。

完成条件

売上高の配列を受け取り、小さい順に並べ替えた結果をカンマ区切りの文字列にして返す関数 bubbleSort を作ってください。どの言語で解く場合も、関数名は bubbleSort にしてください。

返す文字列の形は次のとおりです。

プレーンテキスト

180,290,340,410,520,760
  • 区切りは半角カンマ1つだけ。カンマの前後にスペースを入れないこと
  • 末尾にカンマを付けないこと
  • 同じ値が複数あってもかまいません。そのまま並べてください
  • 配列には必ず1つ以上の要素が入っています

禁じ手

次の道具は使えません。隣同士の比較と入れ替えだけで並べてください。

  • Python の sorted list.sort
  • JavaScript / TypeScript の Array.prototype.sort
  • Java の Arrays.sort

進め方

白紙から書いてください。手が止まったらヒントを開けます。ヒントは3段階で、①方針、②使う構文、③部分解の順に出ます。1つも開けずに通せたら、その問題は自分のものです。

書き始める前に、紙の上で [3, 1, 2] を1周だけ回してみてください。1周が終わったとき、どの位置の値がもう動かないと言い切れるでしょうか。そこが分かると、外側のループを何回回せばよいかも自分で決められます。

要件

  1. 関数名は bubbleSort。どの言語で解く場合も同じ名前にすること
  2. 隣り合う2つを比べ、逆順なら入れ替える方法で並べること
  3. sorted / sort / Arrays.sort などの並べ替えの道具を使わないこと
  4. 結果は半角カンマ区切りの文字列にすること。カンマの前後にスペースを入れない
  5. 印字ではなく return で文字列を返すこと

入出力例

bubbleSort([520,180,340,760,290,410]) → "180,290,340,410,520,760" bubbleSort([900,800,700]) → "700,800,900" bubbleSort([100,200,300]) → "100,200,300" bubbleSort([42]) → "42" bubbleSort([5,5,3,9,3]) → "3,3,5,5,9"

ヒント

前のヒントを開くと次が開きます。開かずに解けると未開封クリアです

①方針 ループを二重にします。内側のループが配列を左から右へなぞりながら、隣り合う2つを比べて逆なら入れ替えます。これを1周終えると、いちばん大きい値が末尾に確定します。外側のループはその1周を繰り返す役です

ヒント 2ヒント 1 を開くと読めます
ヒント 3ヒント 2 を開くと読めます
生田 陸人
監修生田 陸人
ゆめさくエンジニア / 現役ソフトウェアエンジニア監修者プロフィールを見る →
編集 ゆめさく編集部·公開 2026/08/09

関連レッスン

  • 第四の巻 二分探索

    並んだ帳簿を半分ずつ潰します。第二の巻と比較回数を比べます。

  • 第五の巻 整列の途中経過

    選択ソートが3周を終えた時点の並びを答えます。1周で何が確定するかを追います。

  • 第九の巻 計算量を体感せよ

    同じ答えを出す2つのやり方で、比べた回数がどれだけ違うかを数えます。

このレッスンに出てくる用語

意味があいまいなまま進んだ語は、ここから読み直せます。

  • バブルソート隣り合う要素を交換し続ける並べ替え
  • 関数処理に名前を付けて再利用できる単位
  • 配列サイズ固定の同型データの集まり
  • JavaScriptWeb で動的な振る舞いを担う言語
  • TypeScript静的型を加えた JavaScript の上位互換
  • ループ繰り返し処理。矢印で戻すか専用記号で示す
main.py
学習モード
エディタを読み込んでいます

メモ

第三の巻 バブルソート

⌘S で保存