malloc: 2 sortierte felder in eins speichern und ausgeben
-
hi
wenn ich 2 felder hab, z.b.
1, 3, 5, 7 und
2, 4, 6, 8wie bringe ich die mit malloc in ein drittes feld in der richtigen reihenfolge, also 1, 2, 3, 4, 5, 6, 7, 8 ?
-
malloc() ist nur dazu da, um Speicher zu reservieren, nicht um arrays zu sortieren. Wie du das mit dem Sortieren machst musst du dir hald überlegen. Im Netz gibts einige Seiten über Sortieralgorithmen. Wahrscheinlich wäre in deinem Fall ein Algorithmus mit Einfügen am besten.
-
brauchst das mit dem sortieren nicht selber machen einfach qsort verwenden...
-
windalf
*******unnötiger Aufwand von Quicksort, da die Folge zu klein ist. Möglichkeit wäre ein simples Bubblesort.
allgemein
*********Aber was mir hier prädestiniert scheint ist der "Merge"-Schritt von "Mergesort". So schauts nämlich im vorletzten Schritt von Std. Mergesort aus.
bye
tt
-
mag sein das das eventuell nicht performant ist aber bei so wenig elementen spielt das eh keine rolle und vom programmiertechnischen aufwand ist es am leichtesten qsort zu verwenden....
-
Ah so, dann machst du dir aber die ganzen Informationen die du hast inklusive den Vorteil, das die 2 Felder vorsortiert sind in der Art wie der OP es gezeigt hat, zu nichte.
Ein drittes Feld anzulegen da kommst du sowieso nicht drumherum. Und wenn ich sowieso schon weiß das die Felder diese Form haben kann ich sie auch gleich dementsprechend in das große Feld einsortieren ----> Merge. Ich rede hier nicht von Mergesort sondern nur von dem "Merge Schritt" sprich dem Kombinieren oder Mischen Schritt.
Und das die Leute um Qsort zu beschleunigen ab einer geringen Anzahl von Elementen zb. auf andere Sortierverfahren umsteigen, weil sich Qsort für eine geringe Anzahl nicht lohnt, ist dir hoffentlich nicht entgangen.
Und lass mal 50k solcher Kleinstfelder sortieren. Aber wenn das Ganze nur einmal gemacht werden soll und dann nie wieder dann ok, dann könnte man durchaus qsort nehmen, weils programmieraufwandsmäßig schneller geht.
bye
tt
-
na das die felder vorsortiert sind ist nur ne vermutung von dir...
als precondition hat es der aufgabensteller nicht gesagt. auch wenns in seinem beispeil zunächst so scheint, kann das auch nur zufällig sein...und ob qsort wirklich langsamer ist weiss ich nicht, ist die frage wie das implementiert ist... eventuell sind da solche spielereien wie wenn du weniger als so udn soviele elemente sortieren sollst dann nimm z.b. ein selection sort oder was auch immer schon mit drin...
-
Windalf schrieb:
und ob qsort wirklich langsamer ist weiss ich nicht, ist die frage wie das implementiert ist... eventuell sind da solche spielereien wie wenn du weniger als so udn soviele elemente sortieren sollst dann nimm z.b. ein selection sort oder was auch immer schon mit drin...
wär ne nette Idee sowas einzubauen, aber ich bezweifle, dass qsort() abprüft um wieviel felder sortiert werden sollen, damit es dann anders sortiert wird.
Also nach dem Beispiel bin auch davon ausgegangen, dass die zwei Arrays bereits vorsortiert sind. Ich schätze mal den Algorythmus, den ich meinte, ist der gleiche, den auch TheTester meint.
Im Endeffekt muss man die zwei Arrays nur elemtweise durchgehen und schauen, welches aktuelle Element kleiner ist (das des 1. oder das des 2.). Das kleinere fügt man dann hald in das Ergebnisarray ein und erhöht den Elementzähler o. ä. des betroffenen Arrays.