blog

ソートアルゴリズムの要約

配列をトラバースする最初のラウンドは、2つの隣接する要素を比較し、大きなスワップは、背面に、最初のラウンドダウンするように、最後の位置は最大の要素です。 配列のトラバースの2番目のラウンド、またはイン...

Jul 29, 2020 · 2 min. read
シェア

ラピッドソート

バブルソート:

最初のラウンドは配列を走査し、隣接する2つの要素を比較し、大きい方を後ろにスワップします。

配列のトラバースの2番目のラウンド、またはインデックス0から要素の隣接する位置を比較するために、背面に大きいが、それは位置の最後のラウンドで設定されているため、要素の最後の位置を気にしない、比較の数を無駄にする必要はありません。したがって、2番目のラウンドダウン、最後から2番目の位置は2番目に大きい要素です。

などなど。つまり、二重のループが必要なのです。

外側のループは、トラバーサルのラウンド数を制御し、各ラウンドの結果は、良い位置にある要素の決定であるため、全部で5つの要素がある場合、5つのピット、最後のピットから始まり、2番目のピットまでずっと、4つのピットを決定するために、2番目のピットが決定されるため、最初の位置は、当然、残りの1つの中で最も小さくなります。ですから、外層は配列の長さを-1回ループする必要があります。

内側のループは、毎回 i=0 の位置から開始し、その大きさと次の位置の要素の大きさを比較します。内層がループする回数は、外側のループの各ラウンドで異なります。これは、内層が比較する回数が、外側のループの制御回数に関連して少なくなっていくからです。例を示します。

function sort(array){
 for(let i=1;i<array.length;i++){
 for(let j=0;j<array.length-i;j++){
 if(array[j]>array[j+1]){
 let temp=array[j]
 array[j]=array[j+1]
 array[j+1]=temp
 }
 }
 }
 return array
}

インサートソート

トランプを整理するのと同じように、カードを手に入れるたびにそれを正しい位置に差し込みます。最初は1枚だけなので、当然順番が決まっています。そして、1枚手に入れるたびにそれを正しい位置に差し込みます。つまり、毎回、現在のカードを順番の決まった配列に差し込んでいるのです。

そこで、i=0 の項目が自然に並んだ配列と考え、すべての項目について i=1 から始まる配列を走査します。順序付けられた配列に現在の項目iを挿入し、具体的には:j = i - 1から、j = 0にトラバースされている、各項目は、現在の項目よりも大きい場合は、背面にjの要素は、j + 1の位置にカバーし、現在の項目iと比較されます。つまり、現在の項目としてj + 1の位置をカバー

function sort(arr){
 for(let i=1;i<arr.length;i++){
 let target=arr[i]
 for(var j=i-1;j>=0;j--){
 if(arr[j]>target){
 arr[j+1]=arr[j]
 }else{
 break
 }
 }
 arr[j+1]=target
 }
 return arr
}
Read next

カスタム電卓のVue実装

シンプルなコンピュータのVue実装

Jul 28, 2020 · 2 min read