1
0

情報Ⅰ ソートアルゴリズム

Last updated at Posted at 2024-03-01

情報のテストがあるのでソートのところの解説を作りました
間違いがあればコメントとかで指摘してください

ところで、ここで書いてるプログラムは教科書とかと同じのにしたんですけど
配列を後ろから見てるの分かりにくくないですかね
あとなんで降順なんだろう
あとfor i in range()も個人的には分かりにくい

ソートとは何か

ここでいうソートとは、「与えられた配列を一定の規則に従って並び替えること」です
今回は、
「任意個の整数がの配列」を「先頭ほど大きく、末尾ほど小さく」なるように並び替えます

交換法(バブルソート)

(これは昇順のアニメーションです)

Bubblesort Animation

バブルソートは棒がどんどん横にスライドしていくので
横にすると気泡が上っていくように見えます

アイデア

プログラム

コードの挙動とは逆になっているところがあるけど本質は同じなので、分かりやすいアニメーションあるので載せておきます
(これは昇順のアニメーションです)
(プログラムでは左に行くほど大きくなって、赤枠も右から左に動きます)

Bubble-sort

赤枠は、プログラムのjとj+1で、現在着目している場所を示しています
赤枠内が逆になっていたら入れ替えをし、赤枠をずらしながら配列全体を確認しています

黒枠は、値が確定した場所です
黒枠がどこで誕生するか(どこで値が確定するか)確認すると、赤枠が端から端まで動いて終わったあと、右端が黒枠にしていることが分かります
これは、赤枠が移動していく途中で出会った、より大きい値を右へ動かしているからです
この黒枠は、プログラムでは配列の0からi-1までに該当します
確定した場所はもう確認する必要がないので、i-1の手前で処理を打ち切っています

説明付きのコード

a = [5,9,2,48,63,5,78,6,50] # 並び替える配列
n = len(a) # 配列の長さ

for i in range(0,n-1,1): # 並び替え完了まで周回する (n-1回)
    for j in range(n-2,i-1,-1): # 配列を一周する (n-2からi-1まで)
        if a[j] < a[j+1]: # 入れ替えるかを判断 (a[j]とa[j+1]の大小関係)
            # 順番が違うとき
            # a[j]とa[j+1]を入れ替える
            temp = a[j]
            a[j] = a[j+1]
            a[j+1] = temp

日本語だけ

並び替える配列がa
配列の長さがn

並び替え完了まで以下を周回
    配列を一周する
        j番目とj+1番目を比較して、入れ替えるかを判断
            j番目とj+1番目を入れ替える
          又は
            何もしない
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0