Have fun
PHP Code:
class QuickSort extends Object{
private var array:Array;
function QuickSort(arrayVal:Array){
array = arrayVal;
sort();
}
private function pivot(beg:Number,end:Number):Number
{
//set pivot to beginning of array
var p:String = array[beg];
//m also starts at beginning
var m:Number = beg;
//n starts off end (we'll decrement it before it's used)
var n:Number = end+1;
do
{
m=m+1;
} while (array[m]<=p && m<end);//find first larger element
do
{
n=n-1;
} while (array[n] >p);//find last smaller element
//loop until pointers cross
while (m<n)
{
//swap
var temp:String=array[m];
array[m]=array[n];
array[n]=temp;
//find next values to swap
do
{
m=m+1;
} while (array[m]<=p);
do
{
n=n-1;
} while (array[n] >p);
}
//swap beginning with n
var temp2:String=array[n];
array[n]=array[beg];
array[beg]=temp2;
return n;// n is now the division between two unsorted halves
}
private function selectionSort(beg:Number,end:Number):Void
{
for (var i:Number=beg;i<end;i++)
{
var minj:String=i+"";
var minx:String=array[i];
for (var j:Number=i+1;j<=end;j++)
{
if (array[j]<minx)
{
minj=j+"";
minx=array[j];
}
}
array[minj]=array[i];
array[i]=minx;
}
}
public function sort():Void
{
quickSortAct(0,array.length-1);
}
public function getArray():Array{
return array;
}
private function quickSortAct(beg:Number,end:Number):Void
{
if (end==beg) return;
if (end-beg<9) //an arbitrary limit to when we call selectionsort
selectionSort(beg,end);
else
{
var l:Number = pivot(beg,end);
quickSortAct(beg,l-1);
quickSortAct(l+1,end);
}
}
}