基数ソート(基数ソート)は名前の通り、それは割り当てをソートする要素を通じた情報の重要な一部であり、また「バケット法」(バケットソート)やビン一種として知られている「割り当て順序」(流通ソート)、ありますアクションの並べ替えを達成するために、「バレル」の一部に、ソート、ソートの安定性を基数に属し、その時間複雑さは、rが取ら基数であり、そしてmはヒープであるO(nlog(登録商標)M)、です番号は、いくつかの点で、他の種類の安定性よりも効率的な方法をソート基数。
ステップ:
まず、数字の配列の最大数は、ソートしたい回数を示し見つけます。
第二に、同じバケット内の同じ桁に分類最初の数字によると、0-9バケットに対応します。
三つは、そのデータは、バケットが0-9の順とFIFOルールに従ってバケツに再びリンクアップ。
四、繰り返しは、番号を発注の終わりまで数十、数百の位、千桁......にただ一桁の後に、それぞれ、2と3を繰り返します。
実装のプロセス図:
コード:
1 パブリック クラス基数ソート{ 2 // 最大数的位数 3 パブリック 静的 int型のmaxLength(INT []配列){ 4 INT maxArr =配列[0 ]。 5 ため(int型 i = 0; iは<arrays.length-1; iは++ ){ 6 場合(配列[I] <配列[I + 1 ]){ 7 maxArr =配列[I + 1 ]。 8 } 9 } 10 リターン(maxArr + "" ).LENGTH(); 11 } 12 //ソート 13は パブリック 静的 ボイドは、基数(INT []配列){ 14 のint i = 0 ; 15 INT J; 16 int型 N- = 1 ; 17 int型のインデックス= 0; // 配列の添字 18は int型 L = arrays.length; // 配列の長さ 。19 int型の最大値= maxLengthの(配列); // の最大数のビットの数 20 //は10のバケットアレイの作成 21である INT [] [] = tempArr 新しい新しい INT [10 ] [L]; 22である // 各バケットサブの定義 23 INT [] =カウント新しい新しい INT [10 ]; 24 ながら(私は= < MAX){ 25 //がアレイに各アレイデータアレイ割り当て 26である ために(J = 0; J <L; J ++ ){ 27 INTの TEMP =配列[J] / N-10%; 28 tempArr [TEMP] [カウント[TEMP] =のアレイ[J]; 29の カウント[TEMP] ++ ; 30 } 31は、 // 各バケットアレイデータは、配列アレイ収集 32を するため(J = 0; J <counts.length; J ++ ){ 33がある ため(INT= 0; <カウント[J]。++ ){ 34の 配列[インデックス] = tempArr [J] [A]。 35 インデックス++ ; 36 } 37の カウント[J] = 0 ; 38 } 39 インデックス= 0 。 40 N = N * 10 。 41 私は++します; 42 } 43 } 44 // 测试 45 公共 静的 ボイドメイン(文字列[]引数){ 46 、INT[]アレイ= {49,38,65,97,176,213,227,49,78,34,12,164,11,18,1 }。 47 基数(アレイ)。 48 のSystem.out.println(Arrays.toString(アレイ))。 49 } 50 }
テスト結果:
[1、11、12、18、34、38、49、49、65、78、97、164、176、213、227]
時間計算:ソートするn個のレコードとして設定され、Dは、値の各範囲の桁、基数ビットの最大数です。時間計算量はOになるように(D(N +基数)、ソーティング収集および配布にトリップする旅行時間あたりのビット数は、時間計算量は(N +基数)Oです )。
結論:長所と短所はまだ知りません。