September 2017 Update
This commit is contained in:
parent
bba7bfd280
commit
ba8067c3b7
14570 changed files with 153136 additions and 63871 deletions
|
|
@ -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);
|
||||
}
|
||||
|
|
@ -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;
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue