ソートアルゴリズム - バケットソート(ジャワ)

com.rao.sortパッケージ; 

インポートjava.utilのクラス。 * ; 

/ * * 
 * @author Srao 
 * @classNameバケットソート
 * @date 2019年12月10日夜05時42分
 * @package com.rao.sort 
 * @descriptionバケットソート
 * / 
パブリック クラスバケットソート{ 

    / * * 
     *バケットソート
     * @param ARR 
     * @return 
     * / 
    パブリック 静的 ダブル []バケットソート(ダブル[] ARR){
         // 1計算の最大値と最小値は、両方の決定しました差
        ダブル分ARR = [ 0 ];
         ダブルマックス= ARR [ 0 ]。
        以下のためにINTは iは= 1 ; I <arr.length; I ++ ){
             場合(MAX < ARR [I]){ 
                マックス =は、[i]はARR。
            } 
            もし(ARR [I] < 分){  = ARR [I]。
            } 
        } 
        ダブル D =最大値- 最小。

        // 2.初始化桶
        int型 bucketNum = arr.length。
        一覧 <LinkedListは<ダブル>>最高の人生の見つけ方= 新しい ArrayListを<> (bucketNum)。
        以下のためのint型 I = 0; I <bucketNum; I ++ ){ 
            bucketList.add(新しい新しい LinkedListの<> ()); 
        } 

        // 3トラバース配列の要素、対応するバケット内に配置されている全ての要素
        のためにINT I = 0 ; I < arr.length; I ++ ){
             // タブの内側に配置されなければならない現在の要素計算
            INT NUM =(INT)((ARR [I] -最小)/(D /(bucketNum - 1 ))); 
            最高の人生の見つけ方。GET (NUMを).add(ARR [I]); 
        } 

        // ソートバレル内の要素のそれぞれについて4 
        INT I = 0 ; I <bucketNum; I ++){
            Collections.sort(。最高の人生の見つけ方取得(I)); 
        } 

        // 5.输出全部元素
        INT K = 0 (LinkedListの<ダブル> {:最高の人生の見つけ方ダブルス)
             のための(ダブルaDouble:ダブルス){ 
                [K] ARR = aDouble。
                K ++ ; 
            } 
        } 

        戻りARR。
    } 

    パブリック 静的 ボイド(文字列[]引数){主
         ダブル [] ARR = 新しい ダブル {] [ 4.126.4210.0023 3.02.1238.1224.1210.09 }。
        システム。アウト.println(Arrays.toString(ARR)); 
        ARR = バケットソート(ARR)。
        システム。アウト.println(Arrays.toString(ARR)); 
    } 
}

  バケットソートは、ソートカウントの改善として見ることができる、整数の配列内の値の範囲のソートカウントをソートすることができますが、小数点以下の桁数の配列のために、我々はバケットソートを使用する必要があります。この時間をカウントする方法がありません。

  バケットソート間隔の異なる数にアレイを分割することであり、各バケット内の数は、一般に、ソートやクイックソートマージされ、この時に使用されるアルゴリズムをソート、ソートした後、元にすべてのタブの数を返します配列。

おすすめ

転載: www.cnblogs.com/rao11/p/12018237.html