JavaScriptでのバケットソートの詳しい説明

韦小宝
リリース: 2018-03-14 14:28:37
オリジナル
2635 人が閲覧しました

この記事では、JavaScript でのバケットの並べ替えについて説明します。JavaScript でのバケットの並べ替えについて知らない場合、または JavaScript でのバケットの並べ替えに興味がある場合は、この記事を見てみましょう。 point

バケットソートはカウンティングソートのバージョンアップ版です。 関数 のマッピング関係を利用します。効率の鍵はこのマッピング関数の決定にあります。

バケットの並べ替えをより効率的にするには、次の 2 つのことを行う必要があります:

1. 十分な追加スペースがある場合は、バケットの数を増やすようにしてください。

2.入力 N を変換します。データは K 個のバケットに均等に分散されます

同時に、バケット内の要素の並べ替えでは、どの比較並べ替えアルゴリズムを選択するかがパフォーマンスに重大な影響を与えます。

いつが最も速いか


入力データが各バケットに均等に分散できる場合

最も遅いのはい​​つか


入力データが同じバケットに分散される場合

バケット並べ替え JavaScript コードの実装:

function bucketSort(arr, bucketSize) {  
    if (arr.length === 0) {  
      return arr;  
    }  
  
    var i;  
    var minValue = arr[0];  
    var maxValue = arr[0];  
    for (i = 1; i < arr.length; i++) {  
      if (arr[i] < minValue) {  
          minValue = arr[i];                //输入数据的最小值  
      } else if (arr[i] > maxValue) {  
          maxValue = arr[i];                //输入数据的最大值  
      }  
    }  
  
    //桶的初始化  
    var DEFAULT_BUCKET_SIZE = 5;            //设置桶的默认数量为5  
    bucketSize = bucketSize || DEFAULT_BUCKET_SIZE;  
    var bucketCount = Math.floor((maxValue - minValue) / bucketSize) + 1;     
    var buckets = new Array(bucketCount);  
    for (i = 0; i < buckets.length; i++) {  
        buckets[i] = [];  
    }  
  
    //利用映射函数将数据分配到各个桶中  
    for (i = 0; i < arr.length; i++) {  
        buckets[Math.floor((arr[i] - minValue) / bucketSize)].push(arr[i]);  
    }  
  
    arr.length = 0;  
    for (i = 0; i < buckets.length; i++) {  
        insertionSort(buckets[i]);                      //对每个桶进行排序,这里使用了插入排序  
        for (var j = 0; j < buckets[i].length; j++) {  
            arr.push(buckets[i][j]);                        
        }  
    }  
  
    return arr;}
ログイン後にコピー

上記がこの記事のすべての内容です。あまり詳しくない場合は、両方を自分で実装することができ、簡単に習得できるでしょう。

関連する推奨事項:
バケットソートアルゴリズムの PHP 実装例の共有

以上がJavaScriptでのバケットソートの詳しい説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!