# isort

Syntax

isort(X, [ascending=true])

Arguments

X is a vector or a tuple of vectors of the same length.

ascending is a Boolean scalar or vector indicating whether to sort X (or vectors of X sequentially) in ascending order or descending order. The default value is true (ascending order).

Details

Instead of returning a sorted vector like sort!, `isort` returns the indexes in the original vector for each element in the sorted vector.

X[isort X] is equivalent to sort!(X).

Examples

```\$ x = 4 1 3 2;
\$ y = isort(x);
\$ y;
[1,3,2,0]
// for the sorted x: [1 2 3 4], the first element 1 is from position 1 of the original x, the second element 2 is from position 3 of the original x, ... etc.
\$ x[y];
[1,2,3,4]
// equivalent to sort!(x)

\$ z=isort(x, false);
\$ z;
[0,2,3,1]
\$ x[z];
[4,3,2,1]

\$ x=2 2 1 1
\$ y=2 1 1 2
\$ isort([x,y]);
[2,3,1,0]
\$ isort([x,y],[0,0]);
[0,1,3,2]
```

Sort a table based on one of its columns:

```\$ t2 = table(4 2 3 1 as x, 9 6 7 3 as y);
\$ t2;
```

x

y

4

9

2

6

3

7

1

3

```\$ t2[isort(t2.x)];
```

x

y

1

3

2

6

3

7

4

9

```\$ t2[isort(t2.x, false)];
```

x

y

4

9

3

7

2

6

1

3

Sort a table based on multiple columns:

```\$ a=5 5 5 3 3 8 7 7;
\$ b=`MSFT`GOOG`IBM`YHOO`X`YHOO`C`ORCL;
\$ t=table(a,b);
\$ t;
```

a

b

5

MSFT

5

GOOG

5

IBM

3

YHOO

3

X

8

YHOO

7

C

7

ORCL

```\$ t[isort([a,b], false true)];
// first sort descending on a, then sort ascending on b
```

a

b

8

YHOO

7

C

7

ORCL

5

GOOG

5

IBM

5

MSFT

3

X

3

YHOO

```\$ t[isort([a,b], false)];
// equivalent to t[isort([a,b], false false)];
```

a

b

8

YHOO

7

ORCL

7

C

5

MSFT

5

IBM

5

GOOG

3

YHOO

3

X