iOSエンジニア女子の日常

ほぼ未経験からエンジニアとして働いている成長記録やおもしろいと思ったこと色々書いていこうとおもいます

アルゴリズム(選択ソート)

なっとくアルゴリズムの写経 p37

コメントを書き加えた

#小さいものから順に並べて、配列内の一番最小の値のインデックス番号を返す
def findSmallest(arr):
    #最も小さい値を格納
    smallest = arr[0]
    #最も小さい値のインデックスを格納
    smallest_index = 0
    for i in range(1, len(arr)):
        print(arr[i],i)
        if arr[i] < smallest:
            smallest = arr[i]
            smallest_index = i
    return smallest_index
    
#選択ソート 配列をソートしてソートした配列を返す
def selectionSort(arr):
    newArr = []
    #配列に入ってる回数分中の関数を実行
    for i in range(len(arr)):
        #配列内で最も小さい要素を見つけ出し
        smallest = findSmallest(arr)
        #新しい配列に追加
        #popメソッド:指定した位置の要素を削除し、値を取得
        #append:リストの最後に追加
        newArr.append(arr.pop(smallest))
        print(arr)
        print(newArr)
        
    return newArr
    
print(selectionSort([5,3,6,2,10]))

ここが自分の中で??ってなったので例を載せておく

newArr.append(arr.pop(smallest))
#arr.pop(smallest)で一番小さい値のインデックスを削除した後に
        #newArrで入れている
        #例
        #例
        #arr:[5, 3, 6, 10]
        #newArr:[2]
        #↓
        #arr:[5, 6, 10]
        #newArr:[2, 3]
        #↓
        #arr:[6, 10]
        #newArr:[2, 3, 5]
        #↓
        #arr:[10]
        #newArr:[2, 3, 5, 6]
        #↓
        #arr:[]
        #newArr:[2, 3, 5, 6, 10]

美しい流れるような関数 こういうのを息を吸って吐くかのようにかけるようになりたい

なっとく! アルゴリズム

なっとく! アルゴリズム