parm name='' size=0 #-- the following script was adapted for mpe from the following java #-- code.... #-- // List is an integer array of size == n #-- swapped = true; // boolean variable #-- i = n-1; #-- while (swapped && (i >= 1)) #-- { #-- swapped = false; #-- for (j = 0; j <= (i-1); j++) #-- if (List[j] > List[j+1]) #-- { #-- swap(List[j], List[j+1]); #-- swapped = true; // swapping happened #-- } #-- i--; #-- } #-- if "!name" = "?" or dwns("!name") = "help" echo echo ![basename(hpfile)] [array_name] [array_size] echo req. req. echo ![basename(hpfile)] is designed to sort a CI array. echo echo This is a more efficient version of the Bubble Sort Algorithm, in echo the sense that it keeps track of whether or not a swap was done echo during a particular pass over the (sub)array. If no swap was done, echo this means that the array is already sorted. Hence, the algorithm echo can terminate. echo echo ARRAY_NAME := The base portion of the array's name. Be sure echo to include any leading or trailing underscores (if used). echo ARRAY_SIZE := The number of array elements, expressed as an echo integer. echo echo Influencing CI variables: echo KEY_BEGIN := The beginning position of the key in the array echo (1-relative). echo KEY_LENGTH := The length of the key, in bytes, expressed as echo as an integer. echo echo If these variables are not declared, then the entire array echo string will be the sort key. echo return endif setvar _bs_array "!name" setvar _bs_array_size !size setvar _bs_swapped true setvar _bs_i _bs_array_size-1 if bound(key_begin) and bound(key_length) setvar _bs_key_begin key_begin setvar _bs_key_length key_length else setvar _bs_key_begin 1 setvar _bs_key_length len(!_bs_array!_bs_i) endif while (_bs_swapped and _bs_i >= 1) setvar _bs_swapped false setvar _bs_j 0 while (_bs_j <= (_bs_i-1)) setvar _bs_j _bs_j + 1 #-- am i bigger than my neighbor? if str(!_bs_array!_bs_j,_bs_key_begin,_bs_key_length) > & str(!_bs_array![_bs_j+1],_bs_key_begin,_bs_key_length) #-- standard swap logic setvar _bs_hold !_bs_array!_bs_j setvar !_bs_array!_bs_j !_bs_array![_bs_j+1] setvar !_bs_array![_bs_j+1] _bs_hold #-- indicate that a swap was done setvar _bs_swapped true endif endwhile setvar _bs_i _bs_i - 1 endwhile deletevar _bs_@