0
私はRでマージソートを書いています。私は2つの関数を持っています。最初はmergelist()mergesortでの比較の数R
mergelist <- function(a, b)
{
al <- length(a$data)
bl <- length(b$data)
r <- numeric(al + bl)
numberOfComparisions <-0
ai <- 1
bi <- 1
j <- 1
while((ai <= al) && (bi <= bl))
{
if(a$data[ai]<b$data[bi])
{
r[j] <- a$data[ai]
ai <- ai + 1
numberOfComparisions = numberOfComparisions + 1
}
else
{
r[j] <- b$data[bi]
bi <- bi + 1
numberOfComparisions = numberOfComparisions + 1
}
j <- j + 1
}
if(ai<=al)
r[j:(al+bl)] <- a$data[ai:al]
else if(bi <= bl)
r[j:(al+bl)] <- b$data[bi:bl]
returnList <- list(number=numberOfComparisions + a$number + b$number , data = r)
return(returnList)
}
である。この方法は、2にかかるパラメータaとbとのリストをソートし、そこが行われているどのように多くのcomparisions私に言って、リストの数属性でソートされたリストを返します。
また、私はこの方法をマージ()は、ベクトルxに取り、それをソート
mergesort <- function(x)
{
l <- length(x)
if(l > 1) {
p <- ceiling(1/2)
a <- mergesort(x[1:p])
b <- mergesort(x[(p+1):l])
return(mergelist(a,b))
}
lister <- list(number=0, data = x)
return(lister)
}
を持っています。 mergelistと同じnumber属性を持つmergelist()のようなリストを返しています。 mergesort(c(11,10,9,15,6,12,17,8,19,7))
、
$number [1] 22
$data [1] 6 7 8 9 10 11 12 15 17 19
を返す。しかし、それは
$number
[1] 30
$data
[1] 6 7 8 9 10 11 12 15 17 19
だから、これはそれがどこそれはshouldn比較ですがカウント意味を返す必要があります。
は今私の問題は、私は次の例ということです't。私はどこを知りません。誰かが私が間違っていることを教えてもらえますか?
男のようすべきではありません。 –
うれしかった:) – Prem