我需要编写一个函数来检查数组/列表/向量(在R中)/ 按降序排序。必须使用Divide& Conquer实现答案。
这是我尝试过的(实施在R中):
is.sort<-function(x){
n<-length(x)
if (n==1)
return(T)
mid<-floor(n/2)
x1<-is.sort(x[1:mid])
x2<-is.sort(x[(mid+1):n])
return(ifelse(x1>=x2,T,F))
}
但那总是返回T:/ 感谢您的帮助
答案 0 :(得分:1)
使用D&amp; C实现这一点非常尴尬。但是,试试吧。
x
长度> = 2,则将其划分为2个非空子序列x1
和x2
。如果x
已排序,x1
已排序,且x2
中的最后一个元素大于或等于(假设非增加排序),则对x1
进行排序x2
中的第一个元素。 这可以实现为:
is.sort<-function(x){
n<-length(x)
if (n==1)
return(TRUE)
mid<-floor(n/2)
return(x[mid] >= x[mid+1] && is.sort(x[1:mid]) && is.sort(x[(mid+1):n]))
}
BTW,R具有is.unsorted
函数,但它仅确定序列是否按w.r.t排序。 <
或<=
。对于那些错过>=
等效的人来说,这是一个简单的Rcpp实现:
Rcpp::cppFunction('
bool is_sort(NumericVector x) {
int n=x.size();
for (int i=0; i<n-1; ++i)
if (x[i] < x[i+1]) return false;
return true;
}
')