# devolver el índice en una ordenación por inserción

I want to know how to return the indices of the original elements in the insertion sort algorithm such as the function `[B,IX] = sort(A,...)` en matlab.

El algoritmo es:

``````function list = insertionSort(list)

for i = (2:numel(list))

value = list(i);
j = i - 1;

while (j >= 1) && (list(j) > value)
list(j+1) = list(j);
j = j-1;
end

list(j+1) = value;

end %for
end %insertionSort
``````

Quiero una función `[list indx]= insSort(list)` to return the sorted elements with its original indices.

preguntado el 27 de noviembre de 13 a las 04:11

If you don't mind me asking, why are you writing your own sort algorithm when MATLABs `sort` method will be faster pretty much 100% of the time? -

sort method in matlab is depending on the quick sort which is slower than insertion sort in a nearly ordered data which is the case of my data. -

Debes leer este MATLAB blog post. As far as I can tell, MATLAB already drops down to an insert sort after a certain point, so I would be surprised if a pure insert-sort would be faster. Not to mention the fact that `sort` is native compiled code, which is going to be very hard to beat with just MATLAB code. -

you are right, my claim was based on the info here [link] (sorting-algorithms.com) without coding,,, but after trying many samples the built-in sort in matlab is faster than the insertion even in the case of nearly sorted data..... Thank you for your valuable comments :) -

## 1 Respuestas

Hope this isn't homework.

``````function [ind, list] = insertionSort(list)

ind = [1:length(list)]'; % build list of indicies

for i = (2:numel(list))

value = list(i);
j = i - 1;

while (j >= 1) && (list(j) > value)
list(j+1) = list(j);
ind(j+1) = ind(j); % copy index when you shift
j = j-1;
end

list(j+1) = value;
ind(j+1) = i; % write final index location

end
end
``````

respondido 27 nov., 13:06

It's not. Thank you for your help. - A3B2

also, i didnt check the speed of this with any large data sets, so make sure you profile it. sorting large data sets efficently is kind of a black art - atípicos

it works well and of course the algorithm becomes very slow while sorting the last part of the data :) - A3B2

yeah, unless you are tailoring your function to a very specific dataset, its hard to beat the efficency of profesionally coded sort algorithms. - atípicos

that's right !last version of sort in matlab implements 3 level sorting as in that link mathworks.com/company/newsletters/articles/… as MrAzzaman mentioned in a previous comment - A3B2

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.