カードを小さい順に
手札の数字カードを、小さい順に並べたいとき、あなたはどうしますか。
一番小さいカードを見つけて、一番左に置きます。次に、残りから一番小さいカードを選んで、その右に置きます。
これを、くり返せば、並びます。プログラムでも、同じ手順を使えます。
今日のキーワード
| ことば | いみ | れい |
|---|---|---|
| 並べかえ | データを、小さい順や大きい順に、並べなおすことです。 | [5, 3, 8] を [3, 5, 8] にする |
| 昇順と降順 | 昇順は小さい順、降順は大きい順です。 | 1, 2, 3 は昇順 |
| 選択ソート | 残りの中で一番小さいものを選び、前に置くことをくり返す方法です。 | 最小を探して、先頭と入れかえる |
| 入れかえ | リストの二つの場所の値を、取りかえることです。 | temp を使う |
| 写し | 元のリストを変えないために作る、同じ中身の別のリストです。 | result = [] |
学生が入力するセルは、このプレビューでは空白です。
例: [5, 3, 8, 1] を並べかえる
| 回 | 見る範囲 | 一番小さい値 | 並べた結果 |
|---|---|---|---|
| はじめ | (なし) | (なし) | [5, 3, 8, 1] |
| 1回目 | 0番目から後ろ | 1 | [1, 3, 8, 5] |
| 2回目 | 1番目から後ろ | 3 | [1, 3, 8, 5] |
| 3回目 | 2番目から後ろ | 5 | [1, 3, 5, 8] |
学生が入力するセルは、このプレビューでは空白です。
小さな確認: 手順の理解
やってみよう
小さな確認: 手順の理解
3問挑戦してみましょう。回答はここで採点され、その後は保存されません。点数を残したい場合や、続きから再開したい場合はログインしてください。ログインして点数を保存
答えはここで採点され、保存されません。アカウントがあれば、結果が残ります。
二つの値を入れかえる
a = b と書いて、そのあと b = a と書くと、二つとも同じ値になってしまいます。
先に、一方を temp に預けておきます。そうすれば、値が消えません。コップ二つの飲み物を入れかえるとき、空のコップを使うのと同じです。
やってみよう: 入れかえる
items = [5, 3, 8, 1]
# 0番目と3番目を入れかえます。
temp = items[0]
items[0] = items[3]
items[3] = temp
print(items)
# temp を使わずに、2行だけで書くと、どうなりますか。
# 試して、結果を見てみましょう。
やってみよう: 選択ソート
items = [5, 3, 8, 1]
for i in range(len(items)):
# i 番目から後ろで、一番小さい値の番号を探します。
best = i
for j in range(i + 1, len(items)):
if items[j] < items[best]:
best = j
temp = items[i]
items[i] = items[best]
items[best] = temp
print(i + 1, "回目:", items)
for が二重になっている
ヒント
外の for は、「何番目を決めるか」です。内の for は、「残りで一番小さいものを探す」ことです。前の授業で学んだ、最小を探す手順が、内の for の中に入っています。
Python の道具
Python には、並べかえの道具があります。items.sort() は、元のリストを並べかえます。
sorted(items) は、並べた新しいリストを返します。元は変わりません。大きい順にするには、reverse=True を付けます。