順序付けのアルゴリズムをソートするJava 8つの基数

まず、アクションフィギュアの遊び

分析の第二に、アイデア

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))。
    }
}

 

おすすめ

転載: www.linuxidc.com/Linux/2019-08/159801.htm