Registrierung Kalender Mitgliederliste Teammitglieder Suche Häufig gestellte Fragen Zur Startseite

Informatiker Board » Themengebiete » Theoretische Informatik » Berechenbarkeits- und Komplexitätstheorie » Quicksort Insertion Sort Hybrid » Antwort erstellen » Hallo Gast [Anmelden|Registrieren]

Antwort erstellen
Benutzername: (du bist nicht eingeloggt!)
Thema:
Nachricht:

HTML ist nicht erlaubt
BBCode ist erlaubt
Smilies sind erlaubt
Bilder sind erlaubt

Smilies: 21 von 33
smileWinkDaumen hoch
verwirrtAugenzwinkerngeschockt
Mit ZungeGottunglücklich
Forum Kloppebösegroßes Grinsen
TanzentraurigProst
TeufelSpamWillkommen
LehrerLOL HammerZunge raus
Hilfe 
aktuellen Tag schließen
alle Tags schließen
fettgedruckter Textkursiver Textunterstrichener Text zentrierter Text Hyperlink einfügenE-Mail-Adresse einfügenBild einfügen Zitat einfügenListe erstellen CODE einfügenPHP CODE farbig hervorheben
Spamschutz:
Text aus Bild eingeben
Spamschutz

Die letzten 2 Beiträge
eulerscheZahl

Bei einem Aufruf von quicksort wirst du da nicht viel merken. Du solltest in der main Funktion noch eine Schleife machen, sodass dein Rechner ein paar Sekunden beschäftigt ist.
blubberl12 Quicksort Insertion Sort Hybrid

Meine Frage:
Hallo zusammen,

ich muss folgende Aufgabe bearbeiten:

Modi?zieren Sie den in der Vorlesung besprochenen Quicksort-Algorithmus, sodass ab einer (vorher festgelegten) Teilproblemgröße von m Elementen nicht mehr rekursiv verfahren wird, sondern insertion sort aufgerufen wird. Bestimmen Sie experimentell einen (für Ihre Implementierung) geeigneten Wert von m und dokumentieren Sie Ihre Vorgehensweise hierbei.

Meine Ideen:
Den Quicksort-Algorithmus habe ich entsprechend abgeändert und füge ich unten ein. Ich komme aber einfach nicht darauf wie ich m bestimmen soll. Ich habe immer wieder gelesen, dass das 9 oder 10 sein müsste. Da ich aber zeigen muss, wie ich darauf komme, habe ich versucht mir die Laufzeit für verschiedene size-Werte in Nanosekunden anzeigen zu lassen. Das kommt aber zu Werten in Millionenhöhe (mal davon abgesehen, dass sich die Laufzeit hardwareabhängig immer wieder verändert). In Millisekunden lag der Wert immer zwischen 2 und 6.

public class Quicksort {



public static void main (String args[]){

long startTime = System.nanoTime();
Quicksort q = new Quicksort();
int[] a = new int[100];
fillArray(a);
quicksort(a, 0, a.length-1);
for (int i = 0; i < a.length; i++){
System.out.println(a[i]);
}

long endTime = System.nanoTime();
long totalTime = endTime - startTime;
System.out.println(totalTime);

}

public static int[] quicksort(int[] a, int L, int R) {
int m = a[(L + R) / 2];
int i = L;
int j = R;
int size = (R+1) - L;
if (size <= 10) {
insertionSort(a);
}

else{

while (i <= j) {

while (a[i] < m) i++;
while (m < a[j]) j--;

if (i <= j) {
swap(a, i, j);

i++;
j--;

}
}
if (L < j) quicksort(a, L, j);
if (i < R) quicksort(a, i, R);
}
return a;
}

public static void swap (int[] a, int i, int j){
int tmp = a[i];
a[i] = a[j];
a[j] = tmp;
}

public static int[] insertionSort(int[] a) {
for (int i = 1; i < a.length; i++) {
int tmp = a[i];
int j = i - 1;
while ((j >= 0) && (tmp < a[j])) {
a[j + 1] = a[j];
j--;
}

a[j + 1] = tmp;
}
return a;
}

private static void fillArray(int[] a) {
java.util.Random r = new java.util.Random();
for (int i=0; i<a.length; i++) {
a[i] = r.nextInt(a.length) + 1;

for (int k=0; k<i; k++) {
if (a[i] == a[k]) {
i--;
break;
}
}
}
}

}


Über Vorschläge würde ich mich sehr freuen! smile