Título de la ventana "NONREKURSIVES QUICKSORT"
'Getestet, aber sin Gewähr, P. Pájaro carpintero en XProfan-11.2a free
Declarar NumMax&,A&[],Stack1&[],Stack2&[],StackPtr&,HeadPtr&,TailPtr&
declarar Pivot&,a&,b&,t&,q&,r&,p&,s&
declarar i&,ms1&,sec!
Jump0:
Cls
Imprimir "Wieviele Random Numbers?:";
Entrada NumMax&
Selección aleatoria:i&=0
Mientras que i&<NumMax&
A&[i&]=Rnd(100000)
Localizar 2,2:imprimir i&,A&[i&]''''
Inc i&
EndWhile
ms1& = &GetTickCount''''
StackPtr&=0
HeadPtr&=0
TailPtr&=NumMax&-1
Imprimir "Starte Nonrekursives Quicksort...";''''
Jump2:
Mientras que HeadPtr& < TailPtr&
Pivot& = A&[(HeadPtr& + TailPtr&)/2]
a& = HeadPtr&
b& = TailPtr&
Jump1:
Mientras que A&[a&] < Pivot&
inc a&
EndWhile
Mientras que A&[b&] > Pivot&
dec b&
EndWhile
If a& < b&
t&=A&[a&]
A&[a&]=A&[b&]
A&[b&]=t&
inc a&
dec b&
Goto "Jump1"
EndIf
If a&=b&
q& = b& - 1
r& = a& + 1
Más
q& = b&
r& = a&
EndIf
inc StackPtr&
p& = HeadPtr&
s& = TailPtr&
If (q&-p&) < (s&-r&)
Stack1&[StackPtr&] = r&
Stack2&[StackPtr&] = s&
HeadPtr& = p&
TailPtr& = q&
Más
Stack1&[StackPtr&] = p&
Stack2&[StackPtr&] = q&
HeadPtr& = r&
TailPtr& = s&
EndIf
EndWhile
If StackPtr& > 0
HeadPtr& = Stack1&[StackPtr&]
TailPtr& = Stack2&[StackPtr&]
dec StackPtr&
Goto "Jump2"
EndIf
' Sortierung fertig
sec!=(&GetTickCount - ms1&)/1000
imprimir:Imprimir "Kontrollausgabe (cada " + str$(int(NumMax&/30+1))+". Element):"''''
WhileLoop 0,NumMax&-1,int(1+NumMax&/30)
Imprimir A&[&Loop];
EndWhile:imprimir''''
imprimir:imprimir "Dauer des reinen Sortiervorgangs el "+str$(NumMax&)+" Zufallsvariablen: "+str$(sec!)+" Sek."
imprimir:imprimir "Weiterer Test con beliebiger Taste..."
WaitInput
Goto "Jump0"