2015-10-13 12 views
-2

排序數組元素我有這樣與條件

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

不,先生,這是關於項目目的。它是根據對象的質心對某種排序對象的位置。 –

+0

在循環中使用'sort'和loop循環並不是很困難:D但是我知道我們必須避免在MATLAB中使用循環,所以使用矩陣做這件事很有趣...... –

+0

嗯,你能解釋一下你想要的東西嗎?更多?這很令人困惑.. – BillBokeey

回答

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]在預期的輸出是一個誤差。否則,你必須包含在算法中。這雖然沒有說明,所以我不能說。