2013-09-24 24 views

回答

1

簡單的辦法就是做就地和別碰爲NaN

元素
B=[5,2,NaN,NaN,9,34,23,NaN,89]; 
B(~isnan(B)) = sort(B(~isnan(B))) 

或用新的數組:

B_sorted = nan(size(B)); 
B_sorted(~isnan(B)) = sort(B(~isnan(B))) 
-1

只是用不同的比較方法是行不通的排序,即使你定義比較(X ,NaN)= 0。我想,合併排序和快速排序都會移動你的NaN。

我認爲你需要篩選非NaN值,對它們進行排序並覆蓋非NaN索引。

在僞代碼

int j = 0; 
for(int i= 0; i <= B.size(); ++i) 
    if(B[i] != NaN) 
    indices[j] = i 
    values[j] = B[i] 
    ++j 

sort(values[0 .. j-1]) 

for(int k = 0; k < j; ++k) 
    B[indices[k]]=values[k] 
+0

不知道這是matlab ... – greyfairer

1

如果你在Ruby中做這個...

b=[5,2,'NaN','NaN',9,34,23,'NaN',89] 

b_sort = (b - ['NaN']).sort 
b = b.map{|x| x == 'NaN' ? 'NaN' : b_sort.shift}