18/08/10 19:41:03.87 40ocowuF.net
このコードは芸術的だな。
quicksort <- # by John Chambers
function (x) {
if (length(x) <= 1) return(x)
if (length(x) == 2) {
if (x[1] <= x[2]) return(x)
else return(x[2:1])
}
pivot = sample(x,1)
return( c(quicksort(x[x < pivot]), x[x == pivot], quicksort(x[x > pivot])) )
}
# 「データによるプログランミング」森北出版 (2002)
内部動作確認
> n=4
> x=sample(1:n)
> for(pivot in 1:length(x)){
+ x1=x[x < pivot]
+ x2=x[x ==pivot]
+ x3=x[x > pivot]
+ cat(x1,' | ',x2,' | ',x3,'\n')
+ }
| 1 | 3 2 4
1 | 2 | 3 4
1 2 | 3 | 4
3 1 2 | 4 |
> n=3
| 1 | 3 2
1 | 2 | 3
1 2 | 3 |