2011-10-08 11 views
8

私はJavaScriptのソートアルゴリズムの性能比較についていくつかのresearchを行っており、予期しない結果が見つかりました。バブルソートは、シェルソート、クイックソート、ネイティブのJavascript機能など、他のものよりも優れたパフォーマンスを提供します。なぜこれが起こるのですか?パフォーマンステストの方法が間違っているのでしょうか?バブルのJavascript実装が他のソートアルゴリズムよりもずっと速くソートするのはなぜですか?

私の研究成果はhereです。ここで

は、いくつかのアルゴリズムの実装例は以下のとおりです。バブルソートは、すでにソートされている配列をソートする際に高速であるため、

/** 
    * Bubble sort(optimized) 
    */ 
    Array.prototype.bubbleSort = function() 
    { 
    var n = this.length; 
    do { 
     var swapped = false; 
     for (var i = 1; i < n; i++) { 
      if (this[i - 1] > this[i]) { 
       var tmp = this[i-1]; 
       this[i-1] = this[i]; 
       this[i] = tmp; 
       swapped = true; 
      } 
     } 
    } while (swapped); 
    } 

    /** 
    * Quick sort 
    */ 
    Array.prototype.quickSort = function() 
    { 
     if (this.length <= 1) 
      return this; 

     var pivot = this[Math.round(this.length/2)]; 

     return this.filter(function (x) { return x < pivot }).quickSort().concat(
      this.filter(function (x) { return x == pivot })).concat(
      this.filter(function (x) { return x > pivot }).quickSort()); 
    } 
+1

私は 'filter'を呼び、他の' quickSort'と 'concat'はquickSortを非常に遅くすると思います。 – JiminP

答えて

13

だこと。

同じ配列を何度も並べ替えると、すでにソートされている配列をソートすると、最初のテストで最初の繰り返しでソートされます。

まだソートされていない配列をソートする実際のパフォーマンスをテストするには、ソートの繰り返しごとに新しい配列を作成する必要があります。

関連する問題