用条件排序数组元素

时间:2015-10-13 02:32:38

标签: arrays matlab sorting optimization

我有这样的数组

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排序到下一个更高元素之前的元素。

谁能帮助我?

1 个答案:

答案 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]是预期输出中的错误。否则,您必须在算法中包含环绕。虽然没有说明,但我无法说出来。