まず、アクションフィギュアの遊び
分析の第二に、アイデア
Iアレイの行を実行し、i番目の桁の基数ソートの各数になるまで、そのデータは、10個のキューから抽出され、元の配列に戻って置き、キューにtempjを(J = 1〜10)が配置されます私は行であることが最大桁数よりも大きいです。
1.最大アレイのnビットのビット数、nはそれを配置するために必要とされる時間は、例えば、アレイの最大数は3桁、必要な放電を3回です。
前記m個のアレイの総数は、その後、長さmのアレイが一時的に番号jのiビットの数を記憶するためのtempjの10(J = 0-9)が必要な場合、例えば、1を実行し、各桁が0でありますTEMP0アレイに割り当てられます、あなたは数1がTEMP1アレイに割り当てられているだろう......
3.配信の完了後、次いで順次高度技術の原理に従う、配列tempjからデータをフェッチし、例えば、実験1のために割り当てられた配列{} 1,11,2,44,4、TEMP1 = {1,11}、 TEMP2 = {2}、{44,4}は、{1,11,2,44,4}要素が順次取り出さ= TEMP4、最初のパスの終了後
4. n回サイクルの終了後に、ソートが完了しています
分析の考え、以下に示すように、それぞれが実行フローを渡します。
基数ソート配列{53、3、542、748、14、214、154、63、616}。
第三に、負のヘテロ解析
1.時間の複雑さは:
すべてのバレルはO(n)の時間のキーワードが必要とされる複雑さを割り当て、そして、彼らはO(n)は、Aの時間計算量を必要とする配分した後、新しいキーワードのシーケンスを取得します。
データ行がDキーワードに分割することができる場合は、時間の複雑性をソート基数がO(D * 2N)、nよりもずっと小さいもちろんDので、基本的に線形レベルであろう。
因子2を省略することができる、と関係なく順序付けられた配列かどうか、必要なビットが放電ビットの最大数は、常に時間複雑性O(D×n個)です。式中、n配列の長さ、Dは最大ビット数です。
2.宇宙複雑:
基数ソート空間的複雑度はO(N + k)は、kはバケットの数、数nを割り当てる必要があります。
輸入java.util.Arrays。
パブリッククラスメイン{
パブリック静的無効メイン(文字列[] args){
INT [] ARR =新しいINT [] {10,6,3,8,33,27,66,9,7,88}。
基数ソート(ARR)。
}
静的ボイド基数ソートプライベートは(INT [] ARR){
//ことが行の最大数を決定する
整数のmaxLength = 0;
のために(INT I = 0; I <arr.length; Iは++){
IF(maxLengthの<ARR [I] )
のmaxLength = ARR [I]は;
}
//最大数の最大長さ見つける
) "のmaxLength =(maxLengthの+を"長さ();
一時的にデータを格納するための//配列
のint [] [] TEMP [10] [arr.length] =新しい新しいINTを、
各データアレイの一時浴槽メモリ内のレコードの数//
INT []カウント=新しいINT [10];
//各番号I記録のためのビットの数
のint NUM = 0;
//は、位置取るための要素を配置する必要があり
、INTインデックス= 0;
//長さは、ソートの最大数を判断する
ために(I int型= 0、N - = 1; I <maxLengthの; I ++、N- * = 10){
ため(INT J = 0; J <arr.length; J ++){
NUM = ARR [J] / N-10%;
TEMP [NUM] [カウント[NUM] =のARR [J]、
カウント[NUM] ++;
}
// ARR一時アレイ上背面要素から取られた
ため(INT J = 0; J <counts.length; J ++){
用(INT J2 = 0; J2 <カウント[J]; J2 ++){
ARR [インデックス] = TEMP [J] [J2]。
インデックス++;
}
[J] = 0をカウントします。
}
インデックス= 0。
}
のSystem.out.println(Arrays.toString(ARR))。
}
}