blic class MarquisSort
{
private static int[] resultData;
public static void main( String[] args )
{
int MAX = 10000000;
int[] nums = new int[ MAX ];
Random r = new Random( 20080623 );
for( int i = 0; i < MAX; i++ )
{
nums[ i ] = r.nextInt( MAX );
}
long begin = System.currentTimeMillis();
int[] data = sort( nums ); //排序结果
long end = System.currentTimeMillis();
System.out.println( ( end - begin ) ); //排序时间
}
public static int[] sort( int[] nums )
{
resultData = new int[nums.length];
countingSort( nums, resultData, getMaxInt( nums ) );
return resultData;
}
private static int getMaxInt( int[] data )
{
int max = 0;
for( int i : data )
{
if( i > max )
{
max = i;
}
}
return max;
}
private static void countingSort( int[] oriData, int[] resultData, int k )
{
int[] assistData = new int[ k + 1 ];
for( int i = 0; i < assistData.length ; i++ )
{
assistData[ i ] = 0;
}
for( int j = 0; j < oriData.length ; j++ )
{
assistData[ oriData[ j ] ] = assistData[ oriData[ j ] ] + 1;
}
for( int i = 1; i < assistData.length ; i++ )
{
assistData[ i ] = assistData[ i ] + assistData[ i - 1 ];
}
for( int j = oriData.length - 1 ; j >= 0 ; j-- )
{
resultData[ assistData[ oriData[ j ] ] - 1 ] = oriData[ j ];
assistData[ oriData[ j ] ] = assistData[ oriData[ j ] ] - 1;
}
}
}
排序算法
最新推荐文章于 2025-04-30 16:36:16 发布