根据除数对数字进行排序

时间:2017-03-30 18:28:18

标签: r sorting

我想创建一个函数,以特定的顺序打印给定向量的值:0,1,可被2整除的数字,可被2整除的数字(不是2,excl.0),可被5整除的数字(不是2和3,不包括0)等。

使用“冒泡排序”的某种韵律是不是一个好主意?我认为一个基本的想法是如果条件基于

if (x[i] %% divisor == 0 && x[i+1] %% divisor != 0)

我也知道我应该有一个循环,每回合会增加“除数”值,但除此之外我真的不知道如何开始。我能够理解基本的“冒泡排序”算法,但似乎我有太多的空白来舒适地解决这个问题。

1 个答案:

答案 0 :(得分:0)

# generate a vector 

x <- 1:1000

# the function 

order_n <- function(v) 
  {

y <- 1:floor(v/2);

z <- y[v%%y == 0];

z <- z[z!=1];

return(ifelse(is.infinite(min(z)), 0, min(z))) }

# the ordering vector 

xx <- rep(0, length(x))
for (i in 1:length(x)) {xx[i] <- order_n(x[i])}

head(xx,50)


[1] NA  0  0  2  0  2  0  2  3  2  0  2  0  2  3  2  0  2  0  2  3  2  0  2
[25]  5  2  3  2  0  2  0  2  3  2  5  2  0  2  3  2  0  2  0  2  3  2  0  2
[49]  7  2

我应该提到xx中的0值表示该数字是素数,因此应该为其指定最高顺序