バケットソート
基数ソートの前にいえば、バケットソートについて話す、両方の大きな関連性を持つことになります。
バケットソートの順序は、例えば、整数Nで、Nは1〜M(0〜M-1あまりにも)の範囲の整数、あなたは配列COUNTを作成することができ、サイズは、最初のすべての要素Mであります0に初期化され、各要素は、アレイは、M個のバレルを有する、バレルと呼ばれています。次に数字の順序集合にクロックされ、それは数Aを読み出すことが想定され、COUNTに対応する配列要素[A]プラス1の値、即ち、バケット記録されたデータバケットの落下の数。、非0バケットインデックス(カウント[インデックス]が何回出力)の出力シーケンスを読んだ後、データのデータ出力がソートされます。
9つのデータ、好ましくはM = 10(10のアレイサイズ)の最大値が確立するので、例えば6つの9,3,1,1,0,5バケットソートデータ、アレイの確立、アレイカウントが[10]、データが読み出され、第9読み取り、カウント[9] = 1、3が読み出され、カウント[3] = 1、...カウント[1] = 2、......というように、 [10] = {1,2,0,1,0,1,0,0,0,1}カウント、読んだ後に、配列内のいくつかの要素が0である、数値出力に対応するデータが0でありません、要素が何回出力された出力が正しくソートされた、0,1,1,3,5,9です。
基数ソート
データはバケットがバケットソートの複数のパスを使用するので、あまり必要になりすぎると基数ソート、プロモーションのバケットソートです。どのようにマルチパス方式、方法は、一連のデータを想定し、優先度の低いバケットソート(も高い優先)であります
第二のステップ
第三段階
#include " pch.h " の#include <iostreamの> 使用して 名前空間STD; int型(maxbit INTデータ[]、INT n-は)// データの組のビットの最大数を見つける { int型のカウント= 1 ; INT D = 0 ; 用(INT I = 0、I <N - 、I ++ ) { int型の TEMP = DATA [I]; 一方、(TEMP / 10!= 0 ) { COUNT ++; TEMP = TEMP / 10 ; } IF(D < COUNT) D = COUNT; COUNT = 1 ; } リターンD; } ボイド基数ソート(INTデータ[]、INT N-)// 基数ソートのために { INT D = maxbit(データ、N-); // ビットの最大数、すなわち、バケットソートのためのD倍得る INT * TMP = 新しい新しい INTを [N-]; // スペースtmpが各バケットソート後のデータポイントを格納するために使用される INT * COUNT = 新しい新しい int型[ 10 ]; // 各バケットの桁数を指すようにCOUNTストレージバケット後に立ち下がるソート 値int =基数を1。; INT J、K; のため(INT I = 1 ; I <= D; I ++ ) { 用(INT I = 0 ; I < 10 ; I ++ ) COUNT [I] = 0 ; // 浴槽前のそれぞれの割り当てられたデータが0に初期化されるたびに するために(INT I = 0、I <N - 、I ++)// スケジューリングのためのDで { K =(データ[I] /基数)%10 ; // ビットを見つける(もの、数十、数百は...)何個々のデータで 、COUNT [K] ++ //はバケットデータを対応するプラス1、多くのカウントがバレルを置くか、あります } ため(= J 1、J < 10 ; J ++)// オブジェクトは、バレル空間tmpにデータに順次データをいうどの解決することである [J] COUNT = COUNTを- [J 1。 +] COUNT [J]。 用(INT I = N- 1、I> = 0 ; i--)// データ内のデータが順にソートTMP空間、データは後ろから再生を開始することに注意してください示し { K =(データ[ I] /基数)%10 ; TMP [COUNT [K] - 1 ] =データ[I]、 COUNT [K] - ; } ため(INT I = 0、I <N - 、I ++)// 各バケットにデータソートデータ データ[I] = TMP [I]; 基数 = * 10 ; } 削除 [] TMP; // メモリ解放 削除 [] COUNT; // 解放メモリ } INT )(主に { INTデータ[ 10 ] = { 73であり、22は、93、43は、55、14、28、65、39、81 }; 基数ソート(データ、10 ); のための(INT I = 0 ; I < 10 ; I ++)// 出力データが配列ソート COUTを<<データ[I] << " " 。 システム(" PAUSE " ); 戻り 0 ; }
結果: