JavaScriptを使って十大経典の並べ替えアルゴリズムを実現します.

2813 ワード

泡並べ替えは最も古典的な並べ替えアルゴリズムといえるが、比較的並べ替えアルゴリズムに基づいており、時間の複雑さはO(n^2)であり、その利点は簡単さを実現することであり、nは比較的小さい時の性能が良い.
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)