diff --git a/stl/sort.nas b/stl/sort.nas index e3ed1aa..2b04e47 100644 --- a/stl/sort.nas +++ b/stl/sort.nas @@ -1,18 +1,26 @@ # sort.nas # valkmjolnir 2021/4/2 -var sort=func(vec,left,right,cmp=func(a,b){return a<=b;}){ - if(left>=right) return nil; - var (L,R,tmp)=(left,right,vec[left]); - while(left= +# only using < or > may cause infinite loop or the program may crash +var sort=func(){ + srand(); # be aware! this causes global changes + return func(vec,left,right,cmp=func(a,b){return a<=b;}){ + if(left>=right) return nil; + var base=left+int(rand()*(right-left)); + (vec[left],vec[base])=(vec[base],vec[left]); + var (i,j,tmp)=(left,right,vec[left]); + while(i!=j){ + while(i