1、簡単な基数ソートアルゴリズム
約基数ソートアルゴリズムは、多くの点で多くの情報を得ることができます。基数ソート(基数ソート)、また、基数ソートの順序を分配する、共通の比較の順序に関して、バケット(バケットソート)を選別知られ、ソートはすべてに番号を割り当てることによって完成する元の配列をカバーする位置であって、最終的にプロセス。
基数ソートアルゴリズム:
- ソートアルゴリズムは、非比較方式で実装されて
- 基数ソートアルゴリズムは安定ソートアルゴリズムであります
- 時間基数ソートアルゴリズムの複雑:割り当てはO(n)を必要とし、rは配布リストの数であるOの集合(r)は、一例として、R = 10に、0~9チェーン10にあるように元のシーケンスの分類。及びD、すなわちビット数(例えば、最大数は1234であり、ビット数が4,4 = Dである)、すなわち、 - 「累積を割り当て」回数。したがって、時間複雑度は、O(D×(N + R))です。
- 宇宙基数ソートアルゴリズムの複雑さ:基数はプロセスを並べ替え、追加の補助スペースを必要とし、「バレル」の操作のための任意のビット数のベースの上に、我々は必要とのn + rの一時的なスペースを
2、基数ソートアルゴリズムの基礎
基数ソートアルゴリズムは、あらゆる種類反対しているので、我々はそれを与えられた計算すべてのビットが数であるため、正確なデータが必要になります。
1 // この関数は、Iどの整数のk番目のビットを返す 2 公共 静的 INT getFigure(int型 I、int型K){ 3 のint [] = {1、10、100 1000、10000、100000 ;} 。4 リターン(I / A [K - 1。])10%; 5。 }
3、思考アルゴリズムの基数ソートアルゴリズム
- セットINT []は、各店舗の配列要素数のカウントは同じ数であります
- アレイにアクセスするために使用されるバケットに設定INT []バケット、全てタブの数及び配列の長さが一致していなければなりません
- 配列の現在の要素の最大桁数は、各サイクルと同じ動作である、環状であります
- 最初の配列要素あたりのビットの数を見つける番号の現在の値を比較する必要があり、この場合、各バレルの統計データにビット数の比較をループを使用
- カウント[i]が行われる特定のソートに格納されているため、カウントを使用して、[i]は、データを入れると判定されたとき、サイクルカウントの実行が完了した後、私はビット数のすべての数のアレイ、 [i]はバレルの最も右の境界のi番目の位置であります
- 帯電した各バケットのループを使用して、配列内のデータは、注意が前方に後方から装填されます
- データバケットすべて、ARRに再割り当てを一つずつ取り出し
- 最終的には最終的な結果を得るまで、ループ上記の手順を繰り返します。
4、Javaの基数ソートアルゴリズムを達成するために
1つの パッケージcom.baozi.com.test.paixu。 2 3 インポートjava.util.Arrays。 4 5 / ** 6 * @authorの包子 7 * @Create 2019-05-27-11:24 8 * / 9 パブリック クラスBitNumberSort { 10 公共 静的 ボイドメイン(文字列[]引数){ 11 // 定义整型数组 12 INT [] NUMS = 新しい INT [] {21、56、88、195、354、1、35、12、6、7、4567、87、980、12345 }。 13 INT [] nums1 = 新しい INT[] {1,23,345,21,432,324,4563,56789,6543,233 }。 14 BitNumberSort.lsd_RadixSort(nums1、5 )。 15 のSystem.out.println(Arrays.toString(nums1))。 16 } 17 18 公共 静的 ボイド lsd_RadixSort(INT [] NUMS、int型MAX){ 19 INTは [] =カウント新しい INT [10 ]。 20 INT []バケット= 新しい int型[nums.length]。 21 のために(int型 ;私は= maxに<I ++は、I = 1 ){ 22 23 のために(int型 = 0 K; K <count.lengthあり、k ++ ){ 24 カウント[k]は= 0 ; 25 } 26 27 のために(int型のk = 0; K <nums.lengthあり、k ++ ){ 28 カウント[getFigure(NUMS [k]は、I)] ++ ; 29 } 30 31 のために(int型のk = 1; K <10; kは++ ){ 32 カウント[K] =カウント[K] +カウント[K - 1 ]。 33 } 34 35 のために(int型 K = nums.length - 1、K> = 0; k--){ 36 int型のインデックス= getFigure(NUMS [k]は、I)。 37 バケット[インデックス]カウント- 1] = NUMS [k]を、 38 数[インデックス] - 。 39 } 40 のために(INT K = 0、J = 0; K <nums.length; ++、++ jのk個){ 41 NUMS [K] = バケット[J]。 42 } 43 } 44 } 45 46 プライベート 静的 INT getFigure(int型 I、int型のJ){ 47 、INT[] = 新しい INT [] {1、10、100 1000、10000、100000 }。 48 リターン(I / [J - 1])10%; 49 } 50 }