RunMat
GitHub

issorted — Determine whether an array is already sorted along a dimension or across rows.

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 issorted works in 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.

How issorted runs on the GPU

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

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.

These functions work well alongside issorted. Each page has runnable examples you can try in the browser.

sort, sortrows, unique, argsort, intersect, ismember, setdiff, union

Open-source implementation

Unlike proprietary runtimes, every RunMat function is open-source. Read exactly how issorted works, line by line, in Rust.

About RunMat

RunMat is an open-source runtime that executes MATLAB-syntax code — faster, on any GPU, with no license required.

  • Simulations that took hours now take minutes. RunMat automatically optimizes your math for GPU execution on Apple, Nvidia, and AMD hardware. No code changes needed.
  • Start running code in seconds. Open the browser sandbox or download a single binary. No license server, no IT ticket, no setup.
  • A full development environment. GPU-accelerated 2D and 3D plotting, automatic versioning on every save, and a browser IDE you can share with a link.

Getting started · Benchmarks · Pricing

Try RunMat — free, no sign-up

Start running MATLAB code immediately in your browser.