Я думал о том, чтобы находить M
минимальные значения одно за другим и удалять найденные минимальные значения после каждой итерации, но это медленнее, попробуйте мой тест:
elements = 1e4;
runs = 20;
numMin = 30;
dat = rand(elements, 1);
tic
for i = 1:runs
d = sort(dat);
mins1 = d(1:numMin);
end
t1 = toc/runs
tic
for i = 1:runs
mins2 = zeros(numMin, 1);
d = dat;
for j = 1:numMin
[val, idx] = min(d);
mins2(j) = val;
d(idx) = [];
end
end
t2 = toc/runs
isequal(mins1, mins2)