function script comb_sort { .@size = getarg(2); copyarray .@arr, getarg(0), .@size; .@size = .@gap = getarg(2); .@gap10 = .@size * 10; do { if ( .@gap10 > 10 ) { .@gap10 = .@gap10 * 10 / 13; .@gap = .@gap10 / 10; } .@i = .@swap = 0; while ( .@i + .@gap < .@size ) { if ( .@arr[.@i] > .@arr[ .@i + .@gap ] ) { .@tmp = .@arr[.@i]; .@arr[.@i] = .@arr[ .@i + .@gap ]; .@arr[ .@i + .@gap ] = .@tmp; .@swap = 1; } .@i++; } } while ( .@swap || .@gap > 10 ); copyarray getarg(1), .@arr, .@size; return; } prontera,155,185,6 script test comb sort 100,{ .@total = 10; freeloop 1; for ( .@i = 0; .@i < .@total; ++.@i ) { .@array[.@i] = rand(100); } .@time = gettimetick(0); callfunc "comb_sort", .@array, .@output, .@total; .@endtime = gettimetick(0); for ( .@i = 0; .@i < .@total; ++.@i ) dispbottom .@output[.@i] +""; dispbottom "time used -> "+( .@endtime - .@time )+" milli-seconds"; end; }