Stoogesort
Stooge sort (også Trippelsort ) er en rekursiv sorteringsalgoritme i henhold til prinsippet om deling og styre ( dele og erobre ).
prinsipp
- Hvis det første og det siste elementet ikke er i riktig rekkefølge, byttes de.
- Hvis det er mer enn to elementer i listen, fortsett, ellers avbryt.
- Sorter de to første tredjedeler av listen
- Sorter de to siste tredjedeler av listen
- Sorter de to første tredjedeler av listen
kompleksitet
Algoritmen vil være veldig dårlig i forhold til andre sorteringsalgoritmer, i datavitenskap er dette med Landau symbol ved uttrykt. Siden til og med Bubblesort har bedre kjøretid, er Stoogesort bare av interesse for illustrasjonsformål.
Pseudokode
Følgende pseudokode sorterer inngangsmengden i stigende rekkefølge.
A: Liste (Array) mit der unsortierten Eingabemenge i: Linke Grenze des zu sortierenden Ausschnitts des Arrays j: Rechte Grenze des zu sortierenden Ausschnitts des Arrays
stoogesort(A,i,j) 1 if A[i] > A[j] 2 then A[i] A[j] 3 if i+1 j 4 then return 5 k (j-i+1)/3 6 stoogesort(A,i,j-k) Sortieren der ersten zwei Drittel 7 stoogesort(A,i+k,j) Sortieren der letzten zwei Drittel 8 stoogesort(A,i,j-k) Sortieren der ersten zwei Drittel
gjennomføring
Java
// Interface-Methode (um den Aufruf mit den richtigen Startwerten zu erzwingen)
public void stoogeSort(int[] a)
{
stoogeSort(a,0,a.length);
}
// Interne Methode
private void stoogeSort(int[] a,int s,int e)
{
if(a[e-1]<a[s])
{
int temp=a[s];
a[s]=a[e-1];
a[e-1]=temp;
}
int len=e-s;
if(len>2)
{
int third=len/3; // Zur Erinnerung: Dies ist die (abgerundete) Integer-Division
stoogeSort(a,s,e-third);
stoogeSort(a,s+third,e);
stoogeSort(a,s,e-third);
}
}
Visual Basic
Sub StoogeSort(ByVal Left As Integer, ByVal Right As Integer)
If Feld(Left) > Feld(Right) Then
Temp = Feld(Left)
Feld(Left) = Feld(Right)
Feld(Right) = Temp
End If
If Right - Left >= 2 Then
Call StoogeSort(Left, Left + (Right - Left) * 2 / 3)
Call StoogeSort(Left + (Right - Left) * 1 / 3, Right)
Call StoogeSort(Left, Left + (Right - Left) * 2 / 3)
End If
End Sub
Bevis på korrekthet
Bevis ved fullstendig induksjon (linjenumre refererer til pseudokoden gitt ovenfor): Induksjonsstart
For lengden på matrisen n = 1 og n = 2, sorterer Stoogesort riktig, siden elementene i listen er satt i riktig rekkefølge i algoritmens linje 1–4 og algoritmen avsluttes på dette punktet.
Induksjon lukking
Det følger av induksjonsantakelsen at samtalene i linje 6–8 returnerer riktig sorterte underarrayer. Elementer i den tredje tredjedelen av en korrekt sortering av matrisen kalles type i- elementer, i = 1,2,3.
Etter å ha sortert de to første tredjedelene i linje 6, er det ikke lenger noe Type 3- element i den første tredjedelen av listen.
Etter å ha sortert de to siste tredjedeler i linje 7, inneholder den siste tredjedelen av listen alle type 3- elementer i sortert rekkefølge.
Etter å ha sortert de to første tredjedelene igjen i linje 8, er alle type 1- og type 2- elementene nå i sortert rekkefølge.
Se også
weblenker
- Trippel sortering på Sortieralgorithmen.de