我对R很陌生,因此我的代码肯定有一些改进。我想要对n个元素的数组进行快速排序,计算比较的数量,并在进行k个比较后输出排序后的数组。
到目前为止,我已经将代码重用于这里找到的快速排序算法:
quickSort <- function(arr) {
# Pick a number at random.
mid <- sample(arr, 1)
print(arr)
print(mid)
# Place-holders for left and right values.
left <- c()
right <- c()
# Move all the smaller values to the left, bigger values to the right.
lapply(arr[arr != mid], function(d) {
count <<- count + 1
stopifnot(count <= k)
if (d < mid) {
left <<- c(left, d)
}
else {
right <<- c(right, d)
}
})
if (length(left) > 1) {
left <- quickSort(left)
}
if (length(right) > 1) {
right <- quickSort(right)
}
# Finally, return the sorted values.
c(left, mid, right)
}
我目前正在努力解决以下几件事: 如何不仅获得当前正在排序的局部向量,还可以获得完整向量? 我在正确的位置放置了正确的停止条件吗?
我想要的例子: 给定一个数组(2,4,1,3,5)和第一个枢轴元素3,经过四次比较,我希望输出为(2,1,3,4,5)。
任何帮助将不胜感激!