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

Informatiker Board » Themengebiete » Theoretische Informatik » Berechenbarkeits- und Komplexitätstheorie » Quicksort Insertion Sort Hybrid » Hallo Gast [Anmelden|Registrieren]
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | An Freund senden | Thema zu Favoriten hinzufügen
Neues Thema erstellen Antwort erstellen
Zum Ende der Seite springen Quicksort Insertion Sort Hybrid
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
blubberl12
Grünschnabel


Dabei seit: 06.06.2016
Beiträge: 1

Quicksort Insertion Sort Hybrid Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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
06.06.2016 20:41 blubberl12 ist offline E-Mail an blubberl12 senden Beiträge von blubberl12 suchen Nehmen Sie blubberl12 in Ihre Freundesliste auf
eulerscheZahl eulerscheZahl ist männlich
Foren Gott


Dabei seit: 04.01.2013
Beiträge: 2.859

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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.

__________________
Syntax Highlighting fürs Board (Link)
07.06.2016 06:37 eulerscheZahl ist offline Beiträge von eulerscheZahl suchen Nehmen Sie eulerscheZahl in Ihre Freundesliste auf
Baumstruktur | Brettstruktur
Gehe zu:
Neues Thema erstellen Antwort erstellen
Informatiker Board » Themengebiete » Theoretische Informatik » Berechenbarkeits- und Komplexitätstheorie » Quicksort Insertion Sort Hybrid