見出し画像

ちょっとアルゴニズム - Insertion Sort(Swift)

挿入ソートです。

日本語で解説してあります。

ではswift-algorithm-clubで紹介されているものをやっていきます。

例えばということで

"8, 3, 5, 4, 6"という配列を並び替えしていきます。挿入ソートということで一番最初の数字、ここでは"8"をまず対象にします。その次に"8,3"を対象にします。これを続けて"6"までやるとソート完了となります。

コードです。

func insertionSort(_ array: [Int]) -> [Int] {
   var a = array			 
   for x in 1..<a.count {	
       var y = x
       while y > 0 && a[y] < a[y - 1] { 
           a.swapAt(y - 1, y)
           y -= 1
       }
   }
   return a
} 

関数を作っています。引数を配列で受けて、ソートしていきます。

func insertionSort(_ array: [Int]) -> [Int] {
}

関数名 insertionSort() 引数、"_ array: [Int]"配列を整数を渡します。あとは内部処理です。

引数のarrayは変更不可なので変数"a"を作ってその後の作業に続きます。

 var a = array			
   for x in 1..<a.count {		
       var y = x
       while y > 0 && a[y] < a[y - 1] {
           a.swapAt(y - 1, y)
           y -= 1
       }
   }
   return a

for  in 文ですが、ここでも"1..<a.count"で取り出した数字も新たに変数"y"に入れて,その後の処理に使います。

"y > 0 && a[y] < a[y - 1] "

"y"は0以上で配列の一つ前(a[y - 1] )より大きければ

a.swapAt(y - 1, y)

入れ替える。という操作を、操作が終わるたびに"y > 0"の範囲内(While)で

y -= 1

を実行します。

この仕組みを図示してみます。

画像1


この記事が気に入ったらサポートをしてみませんか?