JavaScriptを使って十大経典の並べ替えアルゴリズムを実現します.
2813 ワード
泡並べ替えは最も古典的な並べ替えアルゴリズムといえるが、比較的並べ替えアルゴリズムに基づいており、時間の複雑さはO(n^2)であり、その利点は簡単さを実現することであり、nは比較的小さい時の性能が良い.
1)アルゴリズムの原理 隣のデータは2つの比較をして、小数は前に置いて、大きい数は後に置いて、このように一回下りてきて、最小の数は第1位に並べられて、第2回もこのように類推して、すべてのデータが並べ替えられますまで.
2)アルゴリズムの説明
<1>隣接する要素を比較します.一番目が二つ目より大きいなら、二つを交換します.
<2>各ペアの隣接要素に対して同じ作業を行い、最初のペアから最後のペアまで、最後の要素は最大の数になるはずです.
<3>すべての要素に対して上記のステップを繰り返し、最後のステップを除きます.
<4>並べ替えが完了するまで、手順1〜3を繰り返します.
3)javascriptコードの実現
改善後のアルゴリズムは以下の通りです.
最適状況:T(n)=O(n)
最悪の場合:T(n)=O(n 2)
平均状況:T(n)=O(n 2)
1)アルゴリズムの原理 隣のデータは2つの比較をして、小数は前に置いて、大きい数は後に置いて、このように一回下りてきて、最小の数は第1位に並べられて、第2回もこのように類推して、すべてのデータが並べ替えられますまで.
2)アルゴリズムの説明
<1>隣接する要素を比較します.一番目が二つ目より大きいなら、二つを交換します.
<2>各ペアの隣接要素に対して同じ作業を行い、最初のペアから最後のペアまで、最後の要素は最大の数になるはずです.
<3>すべての要素に対して上記のステップを繰り返し、最後のステップを除きます.
<4>並べ替えが完了するまで、手順1〜3を繰り返します.
3)javascriptコードの実現
function bubbleSort(arr){
var len = arr.length;
for (var i = 0; i < len; i++) {
for(var j = 0; j < len - i -1; j++){
if(arr[j]>arr[j+1]){ //
var temp = arr[j+1];//
arr[j+1] = arr[j];
arr[j] = temp;
}
}
}
return arr;//
}
var arr=[1,45,37,5,48,15,37,26,29,2,46,4,17,50,52];//
console.log(bubbleSort(arr));//
このアルゴリズムは最も基本的な実現方法であり、次いでこのアルゴリズムを改良し、各並べ替えの最後の位置を記録するためのフラグ変数positionを設定することによって行われる.position位置の後の記録は全部並べられていますので、次の並べ替えをする時はpositionの位置にスキャンするだけでいいです.改善後のアルゴリズムは以下の通りです.
function bubbleSort2(arr){
var i = arr.length -1;// ,
while(i>0){
var position = 0;// ,
for(var j = 0; j < i; j ++){
if(arr[j]>arr[j+1]){
position = j;
var temp = arr[j+1];
arr[j+1] = arr[j];
arr[j] = temp;
}
}
i = position;
}
return arr;
}
var arr=[1,45,37,5,48,15,37,26,29,2,46,4,17,50,52];
console.log(bubbleSort2(arr));
従来の泡並べ替えでは、最大値または最小値しか見つけられませんでした.順方向と逆方向の両方の泡を並べ替える方法を利用して、一度に2つの最終値(最大値と最小値)を得ることができ、並べ替え回数をほぼ半分に減らすことができると考えています.改善後のアルゴリズムは以下の通りです.function bubbleSort3(arr){
var low = 0;
var high = arr.length-1;
var temp;
while(low < high){//
for(var j = low ; j < high ; j++){
if (arr[j]> arr[j+1]) {
temp = arr[j+1];
arr[j+1] = arr[j];
arr[j] = temp;
}
}
--high;// high ,
}
while(low > high){//
for(var j = high ;j > low; j--){
if (arr[j]> arr[j+1]) {
temp = arr[j+1];
arr[j+1] = arr[j];
arr[j] = temp;
}
}
++low;// low ,
}
return arr;
}
var arr=[1,45,37,5,48,15,37,26,29,2,46,4,17,50,52];
console.log(bubbleSort3(arr));
4)アルゴリズム分析最適状況:T(n)=O(n)
最悪の場合:T(n)=O(n 2)
平均状況:T(n)=O(n 2)