2013-09-23 54 views
1

開始有一種方法,以從預定值開始的陣列的元素進行排序?排序陣列從一個預定義的值

比如我想轉換:V2 = [2 5 6 7 1]V = [5 6 7 1 2]

在這種情況下,我想先從值2

感謝

+0

目前還不清楚你在問什麼。什麼定義了「從值2開始的排序」? – sfstewman

+0

@sfstewman對不起,如果我不清楚。 我想與升序排序的矢量V,但不是用1作爲排序開始會做我想開始從一定值排序,然後在末端附加較小的值。在這種情況下,我想從2開始,所以1將在V2的末尾處去。 – gabboshow

+0

排序需要一種排序元素的方法。目前尚不清楚你將如何訂購元素。你對小於2的元素做什麼?如果你的數組是'[-1 -2 -1 0 0 1 1 2]',你想要的排序順序是什麼? – sfstewman

回答

2

像這樣(假設V是行向量):

value = 2 
V2 = sort(V); 
V2 = circshift(V2, [1, -find(V2 == value, 1) + 1]); 

解釋:首先,你需要排序V 。然後你會發現第一個元素的索引等於valuefind(V2 == value, 1)。最後,您必須按照正確的數量「旋轉」已排序的向量,以獲得第一個位置的value。由於V是行向量,則需要沿第二個維度旋轉,所以你必須使用​​作爲第二個參數circshift。請注意,這僅適用於value實際上是V的一部分。

示範:

>> V = [5 6 7 1 2]; 
>> value = 2; 
>> V2 = sort(V); 
>> V2 = circshift(V2, [1, -find(V2 == value, 1) + 1]) 
V2 = 
    2  5  6  7  1 

>> V = [ -1 -2 -1 0 0 1 1 2]; 
>> value = 2; 
>> V2 = sort(V); 
>> V2 = circshift(V2, [1, -find(V2 == value, 1) + 1]) 
V2 = 
    2 -2 -1 -1  0  0  1  1 
+1

相信需要'value'是的'V'可以消除這樣的部分:'V2 = circshift(V2,[1,-find(V2> =值,1)+ 1]) '。這應該起作用,因爲'V2'已經排序。 –

+0

是的,那已經更好了,但是我認爲當value> max(V)'時它仍然失敗。 –

+0

我不知道會不會用這個東西OP,但這應該爲正數的工作:'V2 = circshift(V2,[1,-find(V2> =(值*(值<= MAX(V2)), 1)+ 1])' –