sort_number_array_index

The function sort_number_array_index sorts the index of a number array based on the elements in the array.

 sort_number_array_index ( input;output;number of elements to sort )

The sort_number_array_index function returns TRUE (success) or FALSE (failure). The function is of type BOOL.

The function has three parameters:

  1. input; ARRAY of type NUMBER. This array contains the elements that must be sorted.
  2. output; ARRAY of type NUMBER. This array receives the sorted index.
  3. number of elements to sort; NUMBER. This is the number of elements in the array that must be sorted starting from the first element. This can either be a number or a NUMBER variable or expression.

The function sort_number_array_index returns TRUE if the array was sorted successfully, and FALSE if number of elements to be sorted is negative or zero.

If the function sort_number_array_index fails, the output array is unmodified. The input array is not modified by the function. The output array receives the sorted index from the input array. If the output array is larger than the number of sorted elements, those elements outside the sorted range are left unmodified.

An example is provided here.

ARRAY NUMBER input[4]
ARRAY NUMBER indices[4]
NUMBER i
ASSIGN input[1] := 4		
ASSIGN input[2] := 2		 
ASSIGN input[3] := 1		 
ASSIGN input[4] := 3		 
IF sort_number_array_index (input; indices; 4) THEN
  FOR i FROM 1 UPTO 4 DO
#
@(i) @(input [ indices[i] ])
#
  OD
ELSE
#
Failed to sort the input.
#
  STOP
FI

This example produces the same result as the example included with the function sort_number_array (see sort_number_array). A sorted list is produced by using the sorted index stored in the output array to read the values from the input array.

The type BOOL of the sort_number_array function is used to implement error handling. If the sort succeeds, the return value of the function is TRUE, the IF statement becomes TRUE, and the THEN part is executed. If the return is FALSE, the ELSE part of the IF statement is executed.