使数组按照Matlab值进行排序

Jur*_*eri 3 arrays sorting matlab

假设我有一个双打数组:

arr = 120,121,118,119,117,123,120
Run Code Online (Sandbox Code Playgroud)

而值x

x = 120
Run Code Online (Sandbox Code Playgroud)

我想得到这个价值

newarr = 120,120,119,121,118,117,123
Run Code Online (Sandbox Code Playgroud)

这是一个新的数组,大小与arr相同,但是值是相对于值x排序的,具有最接近的值(如果它是升序或降序则无关紧要).

任何的想法?

Div*_*kar 6

一种方法 -

[~,idx] = sort(abs(x-arr))
out = arr(idx)
Run Code Online (Sandbox Code Playgroud)

输出 -

out =
   120   120   121   119   118   117   123
Run Code Online (Sandbox Code Playgroud)

由于191121等距离x = 120,输出值似乎与问题的预期输出中列出的值不同.在这种方法中,当出现两个这样的等距值时arr,出现在开头的那些也放在输出数组的开头,因此元素的顺序是maintained或者它stable在输出数组中.作为证明这种"稳定性"的一个例子,这里是一个经过修改arr 并保持x相同的样本运行120 -

>> arr
arr =
   120   121   118   119   117   123   121   119
>> out
out =
   120   121   119   121   119   118   117   123
Run Code Online (Sandbox Code Playgroud)

注意:如果您希望等距元素有升序,则可以先排序arr然后使用此方法.