issorted — Test whether arrays are sorted in MATLAB and RunMat.

issorted(A) tests whether data is already sorted. Dimension, order direction, strictness, missing placement, and row-wise modes follow MATLAB semantics.

Syntax

tf = issorted(A)
tf = issorted(A, arg1)
tf = issorted(A, arg1, arg2)
tf = issorted(A, ..., "ComparisonMethod", method)
tf = issorted(A, ..., "MissingPlacement", placement)

Inputs

NameTypeRequiredDefaultDescription
AAnyYesInput array.
arg1AnyYesDimension selector or direction token (including 'rows').
arg2AnyYesDirection token or additional mode selector.
argAnyVariadicOptional dimension/direction/rows arguments.
nameStringScalarYes"ComparisonMethod"Name-value option key.
methodStringScalarYes"auto"Comparison method: 'auto', 'real', or 'abs'.
nameStringScalarYes"MissingPlacement"Name-value option key.
placementStringScalarYes"auto"Missing placement policy: 'auto', 'first', or 'last'.

Returns

NameTypeDescription
tfLogicalArrayTrue when data is already sorted by requested criteria.

Errors

IdentifierWhenMessage
RunMat:issorted:RowsRequiresTwoDimensionalInput'rows' mode is used with non-2D input.issorted: 'rows' expects a 2-D matrix
RunMat:issorted:StringComparisonMethodUnsupportedComparisonMethod is used with string arrays.issorted: 'ComparisonMethod' is not supported for string arrays
RunMat:issorted:DuplicateDirectionMultiple direction tokens are provided.issorted: sorting direction specified more than once

How issorted works

  • 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.

Does RunMat run issorted 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

Using issorted with coding agents

Open a RunMat example with live inputs, then ask the agent to explain how issorted changes the result.

Run a small issorted example, explain the result, then change one input and compare the output.

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.

Sorting Sets

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

Shape

cat · circshift · diag · flip · fliplr · flipud · horzcat · ipermute · kron · permute · repelem · repmat · reshape · rot90 · squeeze · tril · triu · vertcat

Creation

colon · eye · false · fill · inf · linspace · logspace · magic · meshgrid · nan · ones · peaks · rand · randi · randn · randperm · range · true · zeros

Indexing

find · ind2sub · sub2ind

Introspection

isempty · ismatrix · isscalar · isvector · length · ndims · numel · size

Open-source implementation

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

About RunMat

RunMat is an open-source runtime that executes MATLAB-syntax code blazing on any GPU. It is licensed under the Apache 2.0 license.

  • RunMat automatically optimizes your math for GPU execution on Apple, Nvidia, and AMD hardware. No code changes needed. Simulations that took hours now take minutes.
  • Start running code in seconds. RunMat runs in the browser, on the desktop, or from the CLI. No license server, no IT ticket.

Getting started · Benchmarks · Pricing

Download RunMat

Download RunMat for full performance, or use RunMat in your browser for zero setup.