1. Weiterleitung zu NetzLiving.de
  2. Forum
    1. Unerledigte Themen
  3. zum neuen Forum
  • Anmelden
  • Suche
Dieses Thema
  • Alles
  • Dieses Thema
  • Dieses Forum
  • Seiten
  • Forum
  • Erweiterte Suche
  1. Informatik Forum
  2. Webmaster & Internet
  3. Entwicklung

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

  • sulsn
  • 23. Juni 2007 um 18:43
  • Unerledigt
Hallo zusammen,

das Informatik-Forum geht in den Archivmodus, genaue Informationen kann man der entsprechenden Ankündigung entnehmen. Als Dankeschön für die Treue bekommt man von uns einen Gutscheincode (informatikforum30) womit man bei netzliving.de 30% auf das erste Jahr sparen kann. (Genaue Infos sind ebenfalls in der Ankündigung)

Vielen Dank für die Treue und das Verständnis!
  • sulsn
    Punkte
    15
    Beiträge
    2
    • 23. Juni 2007 um 18:43
    • #1

    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....

  • Plantschkuh!
    Punkte
    6.173
    Beiträge
    1.181
    • 23. Juni 2007 um 19:11
    • #2

    1. Formuliere den Quicksort-Algorithmus.
    2. Ersetze jedes Vorkommen von 'x < y' durch Isbefore(x, y).
    3. Der Rest ist auch nicht schwerer.

  • sulsn
    Punkte
    15
    Beiträge
    2
    • 24. Juni 2007 um 11:01
    • #3

    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.

  • Patman
    Punkte
    10
    Beiträge
    2
    • 24. Juni 2007 um 18:07
    • #4

    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.

  • Patman
    Punkte
    10
    Beiträge
    2
    • 25. Juni 2007 um 18:48
    • #5

    Hoff' ich hab dich jetzt nicht verschreckt ;)
    War al "guter Ratschlag" und nicht bös' gemeint :wave:

  • Maximilian Rupp 27. Dezember 2024 um 12:05

    Hat das Thema aus dem Forum Programmieren nach Entwicklung verschoben.

  1. Datenschutzerklärung
  2. Impressum