# How to find the index of the n smallest elements in a vector

How can I get the indices of "n smallest elements" in a 1D array in MATLAB?

The array is a row vector.

I can find the smallest element and its index using ;

```[C, ind] = min(featureDist);
```

The vector is like:

```featureDist =

Columns 1 through 8

48.4766   47.3743   59.5736   59.7450   55.0489   58.2620   63.3865   50.1101
```

and so on...

You can use the sort function. To get the smallest n elements, you can write a function like this:

```function [smallestNElements smallestNIdx] = getNElements(A, n)
[ASorted AIdx] = sort(A);
smallestNElements = ASorted(1:n);
smallestNIdx = AIdx(1:n);
end
```

```B = [48.4766 47.3743 59.5736 59.7450 55.0489 58.2620 63.3865 50.1101];
[Bsort Bidx] = getNElements(B, 4);
```

returns

```BSort =
47.3743   48.4766   50.1101   55.0489
Bidx =
2 1 8 5
```

I know this is an extremely late reply but I am hoping to help anyone who may have this question later.

If A is the array of elements, yu could try using the find function to determine the index of the n smallest elements.

[~, idx] = find(A > -Inf, n, 'first')

To determine the n largest elements,

[~, idx] = find(A < Inf, n, 'last')