在R中使用for循环的冒泡排序

时间:2017-03-23 17:32:46

标签: r algorithm sorting

我正在学习R中的基本算法。我想使用for循环创建冒泡排序算法。

x <- c(20,31,8,46,19) 
for (i in 1:length(x)){

  if (x[i] > x[i+1]){
    temp <- x[i]
    x[i] <- x[i+1]
    x[i+1] <- temp
    cat(x[i],"")
   }
  else   cat (x[i],"")
}

我认为在这个特定的向量中,排序应该在三个“转弯。”

1st应给出结果:20 8 31 19 46

2nd:8 20 19 31 46

3rd:8 19 20 31 46(正确之一)

此循环计算第一个回合,除了打印最后一个元素。

我也不知道如何解决其他“转折”。我预测这是关于另一个for循环的东西,但我不知道如何实现它。

1 个答案:

答案 0 :(得分:0)

您正在迭代x[i] > x[i+1]中的最后一个元素,但使用x[x+1]。因此,在最后一次迭代中length(x)-1超出范围。查看这个只处理bubblesort <- function(x) { for (j in (length(x)-1):1) { for (i in j:(length(x)-1)) { if (x[i] > x[i+1]) { temp <- x[i] x[i] <- x[i+1] x[i+1] <- temp } } } return(x) } x <- c(20,31,8,46,19) print(x) print(bubblesort(x)) 次迭代的代码,再添加一个从向量到后面运行的外部循环。

{{1}}