Kann jemand mir hilfen? "quicksort mit Vergleichsfunktion.."

  • Formuliere den quicksort algorithmus so, dass anstelle der Vergleichsoperatoren eine Vergleichsfunktion verwendet wird, um die Sortierung nach beliebigen Kriterien zu ermöglichen. Verwenden Sie dazu eine Funktion boolean Isbefore (x y), die true zurückliefert, falls der Wert x in der Sortierreihenfolge vor dem Wert y steht (entspricht dem < Operatror im Fall einer aufsteigenden Sortierung; fuer x=y ist das Ergebnis false)..
    kann jemand bitte mir hilfen???
    Dank....

  • Dank für die Antwort!!
    :verycool: , habe ich jetzt ein "quicksort Alg" wie folgend:

    quickSort(a[] ↓m ↓n) {
    if (m==n) { return }
    if (a[m]>a[n]) { a[m] <=> a[n] }
    if (m+1==n) { return }
    k = (m+n) / 2
    if (a[m]>a[k]) {a[m] <=> a[k] }
    if (a[k]>a[n]){a[k] <=> a[n] }
    if (m+2==n) { return }
    x = a[k] // Pivot-Element
    i = m+1; j = n-1
    while (i<=j) {
    while (i<n && a[i]<=x) {
    i = i+1
    while (j>m && a[j]<=x) {
    j = j-1
    }
    if (i<j) {
    a[i] <=> a[j]
    i=i+1;j=j-1
    }
    }//while
    quickSort(a[] ↓m ↓j)
    quickSort(a[] ↓i ↓n)
    }//quickSort

    wie kann den durch IsBefore(x,y)?
    kannst du bitte für mich den formulieren.....
    dank.

  • Die "standard"-qSort implementierung sortiert dir eine (numerische) Liste in aufsteigender reihenfolge. Also ist ein hardcodierter check implementiert, der dir zwei Werte miteinander vergleicht: irgendwas in der art wie x<y

    Dieser check soll nunn eben nicht mehr hardcodiert sein, sodnern durch IsBefore (x, y) implementiert werden, damit zu beispiel auch eine Liste von characters absteigend sortiert werden kann.

    Hab mir jetzt den code nicht "wirklich" durchgelesen, bin nur g'schwind drüber, aber vermutlich müsstest du in

    Code
    if (a[m]>a[k]) {a[m] <=> a[k] } 
    if (a[k]>a[n]){a[k] <=> a[n] }


    jeweils a[m]>a[k] durch isBefore (a[k], a[m]) und a[k]>a[n] analog ersetzen. (Ganz und gar ohne Gewähr!)

    P.S.: Bitte nimm das jetzt nicht persönlich, aber wenn dir nicht auffällt, wo im (pseudo-)code der Vergleich zweier variablen stattfindet, um zu entscheiden, ob diese vertausch werden müssen, solltest du dir viell. noch mal grundlegend Gedanken zum qSort machen, bzw. eigenltich wie dieser funktioniert.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!