我有这样的数组
a =
24 700
10 500
36 560
50 240
10 600
30 500
70 450
10 200
预期结果是
a =
10 500
36 560
24 700
10 200
50 240
30 500
10 600
70 450
这意味着在满足50或更大的第一列中的元素(x)之后,它应该是根据第二列的排序元素,之后它应该将第二列元素从x排序到下一个更高元素之前的元素。
谁能帮助我?答案 0 :(得分:1)
这应该在这里工作。它可能有点粗糙,我没有尝试优化,但它完成了工作。我还首先添加了一个数字来考虑这种可能性。代码基于您识别> = 50并遍历每个块的元素。
function A = fun1()
A = [50,900; 24,700; 10,500; 36,560; 50,240; 10,600; 30,500; 70,450; 10,200];
idx = find(A(:,1)>=50);
idx(idx>1) = idx(idx>1)-1; % Elements >=50 is included in next block
idx(end+1) = size(A,1); % Include final elements
[~,tmp] = sort(A(1:idx(1),2)); % First iteration outside
A(1:idx(1),:) = A(tmp,:);
for k = 2:length(idx)
tmp=[];
[~,tmp] = sort(A(idx(k-1)+1:idx(k),2));
A(idx(k-1)+1:idx(k),:) = A(tmp+idx(k-1),:);
end
输出:
A = [50 900
10 500
36 560
24 700
50 240
30 500
10 600
10 200
70 450]
我认为值[10, 200]
是预期输出中的错误。否则,您必须在算法中包含环绕。虽然没有说明,但我无法说出来。