BubbleSortStep[]:=
(If[BI===Length[BList],
If[BubbleV,
BubbleV=False;
BI=1;
,
Return[];
];
];
If[BList[[BI]]>BList[[BI+1]],{BList[[BI+1]],BList[[BI]]}={BList[[BI]],BList[[BI+1]]};BubbleV=True];
BI++;)

AuswahlSortStep[]:=
(If[APos>=Length[AList],Return[]];
If[AI>Length[AList],
{AList[[APos]],AList[[AMinPos]]}={AList[[AMinPos]],AList[[APos]]};
APos++;
AI=APos+1;
AMinPos=APos;
];
If[APos>=Length[AList],Return[]];
If[AList[[AI]]<AList[[AMinPos]],AMinPos=AI];
AI++;)

QuickSortStep[]:=
(If[QLowPos===QUpPos,
If[QRight-(QUpPos+1)≥1,AppendTo[QStack,{QUpPos+1,QRight}]];
QRight=QLowPos-1;
QLowPos=QLeft;
QUpPos=QRight;
];
If[QRight-QLeft<1,
If[QStack==={},
Return[];
,
QLeft=QLowPos=Last[QStack][[1]];
QRight=QUpPos=Last[QStack][[2]];
QStack=Most[QStack];
];
];
If[QList[[QLowPos+1]]<QList[[QLowPos]],
{QList[[QLowPos]],QList[[QLowPos+1]]}={QList[[QLowPos+1]],QList[[QLowPos]]};
QLowPos++;
,
{QList[[QLowPos+1]],QList[[QUpPos]]}={QList[[QUpPos]],QList[[QLowPos+1]]};
QUpPos--;
];)

MergeSortStep[]:=
Module[{new=False,twos,pos,len},
If[MStart>Length[MList],Return[]];
If[M1===Length[ML1]+1,
While[M2≤Length[ML2],MList[[MStart+M1+M2-2]]=ML2[[M2]];M2++];
new=True;
];
If[M2===Length[ML2]+1,
While[M1≤Length[ML1],MList[[MStart+M1+M2-2]]=ML1[[M1]];M1++];
new=True;
];
If[new,
pos=MStart+M1+M2-3;
twos=FactorInteger[pos][[1,2]];
M1=M2=1;
If[twos-1===Log[2,Length[ML1]],
MStart=pos+1;
If[MStart>Length[MList],Return[]];
ML1={MList[[pos+1]]};
ML2={MList[[pos+2]]};
,
len=2*Length[ML1];
MStart=pos-2*len+1;
ML1=Take[MList,{MStart,MStart+len-1}];
ML2=Take[MList,{MStart+len,pos}];
];
];
If[ML1[[M1]]<ML2[[M2]],
MList[[MStart+M1+M2-2]]=ML1[[M1]];
M1++;
,
MList[[MStart+M1+M2-2]]=ML2[[M2]];
M2++;
];
];

MaxInt=1000;ListLength=64;
opts=Sequence@@{Filling->Axis,FillingStyle->Thick,PlotRange->{0,MaxInt},Ticks->None,Axes->False,ImageSize->{400,200}};
RandomList=RandomInteger[MaxInt,ListLength];
BList=RandomList;BubbleV=False;BI=1;
AList=RandomList;APos=1;AMinPos=1;AI=2;
QList=RandomList;QStack={};QLowPos=QLeft=1;
QUpPos=QRight=Length[QList];
MList=RandomList;MStart=1;M1=M2=1;ML1={MList[[1]]};ML2={MList[[2]]};

Dynamic[TableForm[{{ListPlot[{BList,Table[MaxInt*KroneckerDelta[BI,i],{i,ListLength}]},opts],ListPlot[{AList,Table[MaxInt*KroneckerDelta[AI,i],{i,ListLength}]},opts]},
{ListPlot[QList,opts],ListPlot[MList,opts]}}]]

Do[BubbleSortStep[];AuswahlSortStep[];QuickSortStep[];MergeSortStep[];Pause[0.1],{4000}]