如何使用for循环对数据进行排序?
我想知道如何使用循环(可能是for循环)对如下数据进行排序如何使用for循环对数据进行排序?,r,sorting,loops,R,Sorting,Loops,我想知道如何使用循环(可能是for循环)对如下数据进行排序 [,1] [1,] 179 [2,] 160 [3,] 136 [4,] 227 [5,] 217 [6,] 168 [7,] 108 [8,] 124 [9,] 143 [10,] 140 我尝试使用这样的循环: for (i in 1:nrow(v)) { for (j in i+1:nrow(v)) { if (v[i] > v[j]) { v[i] <- v[j]
[,1]
[1,] 179
[2,] 160
[3,] 136
[4,] 227
[5,] 217
[6,] 168
[7,] 108
[8,] 124
[9,] 143
[10,] 140
我尝试使用这样的循环:
for (i in 1:nrow(v)) {
for (j in i+1:nrow(v)) {
if (v[i] > v[j]) {
v[i] <- v[j]
}
else {
v[i] <- v[i]
}
}
}
v
我知道通过使用顺序来实现这一点非常简单,但作为R的初学者,我很好奇如何通过循环来实现这一点。希望有人能帮忙。谢谢大家! 简单的答案是不要,因为
sort.list
使用内部优化的代码更有效地实现数字排序算法
您需要决定要使用的排序方法。
请参阅以获得一个好的摘要
每个排序算法都有可转换为R的伪代码
下面是bubbleSort的一个实现,它实现了
在R
中,这看起来像
set.seed(1)
A <- sample(10)
A
## [1] 3 4 5 7 2 8 9 6 10 1
n <- length(A)
repeat {
swapped = FALSE
for (i in 2:length(A)) {
newA <- A
if (A[i - 1] > A[i]) {
newA[i - 1] <- A[i]
newA[i] <- A[i - 1]
A <- newA
swapped <- TRUE
}
}
if (!swapped) {break}
}
# ta da!
A
## [1] 1 2 3 4 5 6 7 8 9 10
set.seed(1)
签出排序
,排名
,顺序
。您可以从>help(sort)
中看到帮助文件实际上,我正在尝试在if语句之后显示expressfor(i-in-nrow(v)){for(j-in-i+1:nrow(v)){if(v[i,1]>v[j,1]){expression}}}
。很抱歉。。。
procedure bubbleSort( A : list of sortable items )
repeat
swapped = false
for i = 1 to length(A) - 1 inclusive do:
/* if this pair is out of order */
if A[i-1] > A[i] then
/* swap them and remember something changed */
swap( A[i-1], A[i] )
swapped = true
end if
end for
until not swapped
end procedure
set.seed(1)
A <- sample(10)
A
## [1] 3 4 5 7 2 8 9 6 10 1
n <- length(A)
repeat {
swapped = FALSE
for (i in 2:length(A)) {
newA <- A
if (A[i - 1] > A[i]) {
newA[i - 1] <- A[i]
newA[i] <- A[i - 1]
A <- newA
swapped <- TRUE
}
}
if (!swapped) {break}
}
# ta da!
A
## [1] 1 2 3 4 5 6 7 8 9 10