我正在学习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循环的东西,但我不知道如何实现它。
答案 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}}