[R] Merge sort

Gaston dpv at gmx.ch
Tue Apr 19 21:39:33 CEST 2016


Hello everyone,

I am learning R since recently, and as a small exercise I wanted to 
write a recursive mergesort. I was extremely surprised to discover that 
my sorting, although operational, is deeply inefficient in time. Here is 
my code :

> merge <- function(x,y){
>   if (is.na(x[1])) return(y)
>   else if (is.na(y[1])) return(x)
>   else if (x[1]<y[1]) return(c(x[1],merge(x[-1],y)))
>   else return(c(y[1],merge(x,y[-1])))
> }
>
> division <- function(x){
>   if (is.na(x[3])) return(cbind(x[1],x[2]))
>   else 
> return(cbind(c(x[1],division(x[-c(1,2)])[,1]),c(x[2],division(x[-c(1,2)])[,2])))
> }
>
> mergesort <- function(x){
>   if (is.na(x[2])) return(x)
>   else{
>     print(x)
>     t=division(x)
>     return(merge(mergesort(t[,1]),mergesort(t[,2])))
>   }
> }

I tried my best to write it "the R-way", but apparently I failed. I 
suppose some of the functions I used are quite heavy. I would be 
grateful if you could give a hint on how to change that!

I hope I made myself clear and wish you a nice day,

Cheers,

Gaston

	[[alternative HTML version deleted]]



More information about the R-help mailing list