64 lines
1.5 KiB
Plaintext
64 lines
1.5 KiB
Plaintext
|
|
var var_sort = func() {
|
|
srand(); # be aware! this causes global changes
|
|
var quick_sort_core = func(vec,left,right) {
|
|
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<j and tmp<vec[j])
|
|
j-=1;
|
|
vec[i]=vec[j];
|
|
while(i<j and vec[i]<tmp)
|
|
i+=1;
|
|
vec[j]=vec[i];
|
|
j-=1;
|
|
}
|
|
vec[i]=tmp;
|
|
quick_sort_core(vec,left,i-1);
|
|
quick_sort_core(vec,i+1,right);
|
|
return nil;
|
|
}
|
|
return func(vec) {
|
|
quick_sort_core(vec,0,size(vec)-1);
|
|
return nil;
|
|
}
|
|
}();
|
|
|
|
var vec = [];
|
|
setsize(vec, 1e4);
|
|
rand(time(0));
|
|
for(var i=0;i<1e4;i+=1)
|
|
vec[i] = int(rand()*1e5);
|
|
sort(vec);
|
|
for(var i=1;i<1e4;i+=1) {
|
|
if (vec[i]<vec[i-1]) {
|
|
die("incorrect sort result");
|
|
}
|
|
}
|
|
|
|
var test = func(n) {
|
|
var a=[];
|
|
setsize(a,n);
|
|
for(var i=0;i<n;i+=1) {
|
|
a[i]=int(rand()*n);
|
|
}
|
|
var ts=maketimestamp();
|
|
ts.stamp();
|
|
var_sort(a);
|
|
println("[time] ",str(n)," in ",ts.elapsedMSec()/1000," sec (direct cmp)");
|
|
|
|
var a=[];
|
|
setsize(a,n);
|
|
for(var i=0;i<n;i+=1) {
|
|
a[i]=int(rand()*n);
|
|
}
|
|
ts.stamp();
|
|
sort(a);
|
|
println("[time] ",str(n)," in ",ts.elapsedMSec()/1000," sec (lambda cmp)");
|
|
}
|
|
|
|
for(var i=1000;i<1e6;i*=10) {
|
|
test(i);
|
|
} |