View all functions

CategoryArray: Sorting Sets

What does issorted do in MATLAB / RunMat?

issorted(A) checks whether the elements of A already appear in sorted order.
You can examine a specific dimension, enforce strict monotonicity, require descending order, and control how missing values are positioned. The function also supports row-wise checks that match issorted(A,'rows') from MATLAB.

How does issorted behave in MATLAB / RunMat?

  • issorted(A) examines the first non-singleton dimension and returns a logical scalar.
  • issorted(A, dim) selects the dimension explicitly (1-based).
  • Direction flags include 'ascend', 'descend', 'monotonic', 'strictascend', 'strictdescend', and 'strictmonotonic'.
  • Name-value options mirror MATLAB:
    • 'MissingPlacement' accepts 'auto', 'first', or 'last'.
    • 'ComparisonMethod' accepts 'auto', 'real', or 'abs' for numeric and complex data.
  • issorted(A,'rows', ...) verifies lexicographic ordering of rows.
  • Logical and character arrays are promoted to double precision for comparison; string arrays are compared lexicographically, recognising the literal <missing> token as a missing element.
  • Empty arrays, scalars, and singleton dimensions are always reported as sorted.

GPU execution in RunMat

  • issorted is registered as a sink builtin. When the input tensor lives on the GPU the runtime gathers it to host memory and performs the check there, guaranteeing MATLAB-compatible semantics.
  • Future providers may implement a predicate hook so that simple monotonic checks can execute entirely on device. Until then the behaviour is identical for CPU and GPU arrays.
  • The result is a logical scalar (true or false) regardless of input residency.

Examples of using issorted in MATLAB / RunMat

Checking an ascending vector

A = [5 12 33 39 78 90 95 107];
tf = issorted(A);

Expected output:

tf =
     1

Verifying strict increase

B = [1 1 2 3];
tf = issorted(B, 'strictascend');

Expected output:

tf =
     0

Using a specific dimension

C = [1 4 2; 3 6 5];
tf = issorted(C, 2, 'descend');

Expected output:

tf =
     0

Allowing either ascending or descending order

D = [10 8 8 5 1];
tf = issorted(D, 'monotonic');

Expected output:

tf =
     1

Controlling missing placements

E = [NaN NaN 4 7];
tf = issorted(E, 'MissingPlacement', 'first');

Expected output:

tf =
     0

Comparing complex data by magnitude

Z = [1+1i, 2+3i, 4+0i];
tf = issorted(Z, 'ComparisonMethod', 'abs');

Expected output:

tf =
     1

Checking row order

R = [1 2 3; 1 2 4; 2 0 1];
tf = issorted(R, 'rows');

Expected output:

tf =
     1

Working with string arrays

str = [ "apple" "banana"; "apple" "carrot" ];
tf = issorted(str, 2);

Expected output:

tf =
     0

FAQ

Does issorted modify its input?

No. The function inspects the data in-place and returns a logical scalar.

What is the difference between 'ascend' and 'strictascend'?

'ascend' allows consecutive equal values, while 'strictascend' requires every element to be strictly greater than its predecessor and rejects missing values.

How does 'monotonic' work?

'monotonic' succeeds when the data is entirely non-decreasing or non-increasing. Use 'strictmonotonic' to forbid repeated or missing values.

Can I control where NaN values appear?

Yes. 'MissingPlacement','first' requires missing values to precede finite ones, 'last' requires them to trail, and 'auto' follows MATLAB’s default (end for ascending checks, start for descending).

Is 'ComparisonMethod' relevant for real data?

For real data 'auto' and 'real' are identical. 'abs' compares magnitudes first and breaks ties using the signed value, matching MATLAB.

Does the function support GPU arrays?

Yes. GPU inputs are gathered automatically and the result is computed on the host to guarantee correctness until dedicated provider hooks are available.

How are string arrays treated?

Strings are compared lexicographically using Unicode code-point order. The literal <missing> is treated as a missing value so 'MissingPlacement' rules apply.

What about empty arrays or dimensions of length 0?

Empty slices are considered sorted. Passing a dimension larger than ndims(A) also returns true.

See Also

Source & Feedback