我正在尝试编写自己的程序来在matlab中对向量进行排序。我知道你可以在向量上使用sort(A),但我正在尝试自己编写代码。我的目标是在最少量的交换中对其进行排序,这些交换由ctr变量跟踪。我首先找到min和max元素并对其进行排序,然后有一个循环来查看ii最小向量值并相应地交换它。
这是我开始遇到问题的地方,我试图从我的起始向量中删除所有ii最小值,但我不确定如何在向量上使用〜=。有没有办法用循环来做到这一点?谢谢!
clc;
a = [8 9 13 3 2 8 74 3 1] %random vector, will be function a once I get this to work
[one, len] = size(a);
[mx, posmx] = max(a);
ctr = 0; %counter set to zero to start
%setting min and max at first and last elements
if a(1,len) ~= mx
b = mx;
c = a(1,len);
a(1,len) = b;
a(1,posmx) = c;
ctr = ctr + 1;
end
[mn, posmn] = min(a);
if a(1,1) ~= mn
b = mn;
c = a(1,1);
a(1,1) = b;
a(1,posmn) = c;
ctr = ctr + 1;
end
ii = 2; %starting at 2 since first element already sorted
mini = [mn];
posmini = [];
while a(1,ii) < mx
[mini(ii), posmini(ii - 1)] = min(a(a~=mini))
if a(1,ii) ~= mini(ii)
b = mini(ii)
c = a(1,ii)
a(1,ii) = b
a(1,ii) = c
ctr = ctr + 1;
end
ii = ii + 1;
end