September 2017 Update

This commit is contained in:
Ingy döt Net 2017-09-23 10:01:46 +02:00
parent bba7bfd280
commit ba8067c3b7
14570 changed files with 153136 additions and 63871 deletions

View file

@ -0,0 +1,8 @@
fcn qtSort(list,cmp=Op("<")){ // sort immutable lists
fcn(list,cmp,N){ // spendy to keep recreating cmp
reg pivot=list[0], rest=list[1,*];
left,right:=rest.filter22(cmp,pivot);
N+=1;
T.extend(self.fcn(left,cmp,N),T(pivot),self.fcn(right,cmp,N));
}(list,cmp,0);
}

View file

@ -0,0 +1,24 @@
fcn qiSort(list,cmp='<){ // in place quick sort
fcn(list,left,right,cmp){
if (left<right){
// partition list
pivotIndex:=(left+right)/2; // or median of first,middle,last
pivot:=list[pivotIndex];
list.swap(pivotIndex,right); // move pivot to end
pivotIndex:=left;
i:=left; do(right-left){ // foreach i in ([left..right-1])
if(cmp(list[i],pivot)){ // not cheap
list.swap(i,pivotIndex);
pivotIndex+=1;
}
i+=1;
}
list.swap(pivotIndex,right); // move pivot to final place
// sort the partitions
self.fcn(list,left,pivotIndex-1,cmp);
return(self.fcn(list,pivotIndex+1,right,cmp));
}
}(list,0,list.len()-1,cmp);
list;
}