com.rao.sortパッケージ; インポートjava.util.Arrays; / * * * @author Srao * @className CountSort * @date 2019年12月9日夜02時47分 * @package com.rao.sort * @descriptionカウントシング * / パブリック クラスcountSort { / * * *カウント配列 * @param ARR:配列ソートする * @return * / パブリック 静的 INT [] countSort(INT [] ARR){ int型 N- = arr.length; //は二つ定義変数は、最大値と最小配列格納するために使用される 整数分= ARR [ 0 ]と、 INT最大= ARR [0 ]; のための(INT I = 1 ; I <N-; I ++ ){ IF(MAX < ARR [I]){ 最大 = ARR [I]; } IF(ARR [I] < 分){ 分 = ARR [Iは]; } } // 長さlenのアレイを画定する、アレイ内の最小値を防ぐために行われる1000と最大値1010である // これはサイズ1010作成せずに、ライン10上のサイズの配列を作成配列、無駄なスペース int型のlen =最大-分+ 1。; // 1006が表示さプット一時、一度ならばデジタル、デジタルストレージに登場し、添字としてそれを置く[1006年から1000年]プラスワン のint [ 】一時=新しい新しい INT [LEN]; のための(INT I = 0 ;私は<N- I ++ ){ TEMP [ARR [I]は -分] ++ ; } int型 K = 0 ; // トラバースTEMPに、TEMP [I]の値は、回数iが加えTEMP [5] = 3、説明(5 + 1000)で3回現れ現れる ため(INTを iは= 0 ; I <LEN; I ++ ){ ため(INT J = TEMPを[I]; J > 0 ; J、){ ARR [K] = I + 分; K ++ ; } } 返すARR。 } パブリック 静的 ボイドメイン(文字列[]引数){ INT [] ARR = { 3、6、9、5、0 }。 システム。アウト.println(Arrays.toString(ARR)); ARR = countSort(ARR)。 システム。アウト.println(Arrays.toString(ARR)); } }
ソートカウントすることは、最大値と最小値の差が大きくないソートされていませんです。
基本的な考え方は:配列の添字として配列要素であり、要素は、一時配列と統計、例えばTEMP [I] = Mで発生回数は、iが発生したm回の合計の要素を表します。そして最後に小から大への統計データの一時的な配列をまとめると、この時間は、それが注文されたデータをまとめたものです。