whats wrong with this code ?!
- To: mathgroup at smc.vnet.net
- Subject: [mg110456] whats wrong with this code ?!
- From: "becko" <becko565 at hotmail.com>
- Date: Sat, 19 Jun 2010 07:47:54 -0400 (EDT)
ok. I give up. I've been struggling with this the entire night. I have
three functions: swap[..], split[..] and qksort[..]. The objective is to
implement a recursive sort algorithm. I have tried to execute it on
list={2,5,4,7,9,1};. But I keep getting the "Cannot take positions ..
through .. in .." message. You may need to execute it a few times to see
the error (because of it depends on the RandomInteger). Here are the
three functions. Thanks in advance.
swap[x_List,i_Integer,j_Integer]:=ReplacePart[x,{i->x[[j]],j->x[[i]]}]
slowsort[x_List]:=
Module[{z=x},
Do[
If[z[[j]]<z[[r]],z=swap[z,j,r]],
{r,1,Length[z]-1},{j,r+1,Length[z]}
];
z
]
split[x_List,left_Integer,right_Integer]:=
Module[{L=RandomInteger[{left,right}],z,T,i=left},
T=x[[L]];z=swap[x,left,L];
Do[
If [ z[[j]]<T,z=swap[z,++i,j] ],
{j,left+1,right}
];
z=swap[z,left,i];
{i,z}
]
qksort[x_List,left_Integer,right_Integer]:=
If[right-left>=1,
Module[{i,z},
{i,z}=split[x,left,right];
{qksort[z,left,i-1][[left;;i-1]],z[[i]],qksort[z,i+1,right][[i+1;;right]]}//Flatten
],
x
]