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.12、6.421、0.0023、 3.0、2.123、8.122、4.12、10.09 }。
システム。アウト.println(Arrays.toString(ARR));
ARR = バケットソート(ARR)。
システム。アウト.println(Arrays.toString(ARR));
}
}
バケットソートは、ソートカウントの改善として見ることができる、整数の配列内の値の範囲のソートカウントをソートすることができますが、小数点以下の桁数の配列のために、我々はバケットソートを使用する必要があります。この時間をカウントする方法がありません。
バケットソート間隔の異なる数にアレイを分割することであり、各バケット内の数は、一般に、ソートやクイックソートマージされ、この時に使用されるアルゴリズムをソート、ソートした後、元にすべてのタブの数を返します配列。