从预定义的值开始排序数组

时间:2013-09-23 20:20:25

标签: matlab sorting

有没有办法从预定义的值开始对数组元素进行排序?

例如,我想在V = [5 6 7 1 2]中转换V2 = [2 5 6 7 1]

在这种情况下,我想从值2

开始

由于

1 个答案:

答案 0 :(得分:2)

像这样(假设V是行向量):

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

说明:首先需要对V进行排序。然后,您会发现第一个元素的索引等于value find(V2 == value, 1)。最后,您必须按正确的数量“旋转”已排序的矢量,以便在第一个位置获得value。由于V是行向量,因此您需要沿第二维旋转,因此必须使用[1, ...]作为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