prontera,158,188,5 script test counting sort index 1_F_MARIA,{ freeloop true; .@total = 1000; for ( .@i = 0; .@i < .@total; .@i++ ) .@array[.@i] = .@print$[.@i] = rand(50); // dispbottom implode( .@print$, "," ); .@start = gettimetick(0); callfunc "counting_sort_index", .@array, .@output, .@total; // callfunc "counting_sort_index_", .@array, .@output, .@total; .@end = gettimetick(0); for ( .@i = 0; .@i < .@total; .@i++ ) .@print$[.@i] = .@array[ .@output[.@i] ]; // dispbottom implode( .@print$, "," ); dispbottom "time used -> "+( .@end - .@start )+" mili-seconds"; end; } function script counting_sort_index { .@total = .@size = getarg( 2, getarraysize( getarg(0) ) ); copyarray .@arr, getarg(0), .@size; while ( .@i < .@size ) setd ".@index_"+ .@arr[.@i] +"["+( .@tmp[.@arr[.@i]]++ )+"]", .@i++; do { .@index = getarraysize(.@tmp) -1; .@out[--.@size] = getd( ".@index_"+ .@index +"["+( --.@tmp[.@index] )+"]" ); } while( .@size ); copyarray getarg(1), .@out, .@total; return; } function script counting_sort_index_ { .@total = .@size = getarg( 2, getarraysize( getarg(0) ) ); copyarray .@arr, getarg(0), .@size; while ( .@i < .@size ) { setd ".@index_"+ .@arr[.@i] +"["+( .@tmp[.@arr[.@i]] )+"]", .@i; .@tmp[.@arr[.@i]]++; .@i++; } do { .@index = getarraysize(.@tmp) -1; .@tmp[.@index]--; .@out[.@size-1] = getd( ".@index_"+ .@index +"["+( .@tmp[.@index] )+"]" ); .@size--; } while( .@size ); copyarray getarg(1), .@out, .@total; return; }