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....
Kann jemand mir hilfen? "quicksort mit Vergleichsfunktion.."
-
sulsn -
23. Juni 2007 um 18:43 -
Unerledigt
-
-
1. Formuliere den Quicksort-Algorithmus.
2. Ersetze jedes Vorkommen von 'x < y' durch Isbefore(x, y).
3. Der Rest ist auch nicht schwerer. -
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)
}//quickSortwie 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
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.
-
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.
Jetzt mitmachen!
Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!