insertion sort . Was soll da noch falsch sein ?
-
evtl. reicht es auch so
void insert(int* x,int length) { int i,z,tmp; if(length<3) return; for(i=2;i<length;i++) { tmp=x[i]; x[0] = tmp-1; for( z=i-1;x[z]>tmp;z--) { x[z+1]=x[z]; } printf("%d\n",z); x[z+1]=tmp; } } #define SENTINEL 0 int main(void) { int arr[] = {SENTINEL,3,2,1}; int l = 4; insert(arr,l); return 0; }
-
hmm.
aber muss man denn nicht immer das übergebene Array umkopieren und z.b. an letzter Stelle ein int_max sag ich jetzt mal einfügen. Da steckt ja erstmal
schon aufwand dahinter.Dein Beispiel hab ich leider noch nicht ganz verstanden. Muss ich mir nochmal anschaun

-
Und SENTINEL 0 ist auch problematisch oder. Schließlich kann 0 auch ganz
normal im array vorkommen
-
wenn dann müßtest du am anfang dein array einmal um kopieren, um den sentinel vorne einzufügen, insertionsort läuft von hinten nach vorne, daher auch den sentinel an anfang, der sentinel wird in z.9 bei jedem schleifen durchlauf neu gesetzt, daher ist das define SENTINEL 0 egal da kann man nehmen was man will, sry für das "igtfy" aber ich find das immer wieder schön anzuschauen

man kann sicher auch den algo drehen so dass er in die andere richtung läuft dann tuts evtl. auch ein realloc um den sentinel anzuhängen
-
aha. hab grade was gelesen von wegen der Sentinel muss mindestens so klein
sein wie das kleinste element im array. Dieses müßte man ja auch erst finden.
Würde ja auch wieder Aufwand bedeuten.Was soll eigentlich in deinem Code
if (length<3) return ? 2 elementige menge muss doch auch sortiert werden
-
ich hab jetzt keine lust mehr, such dir nen anderen oder versuch deine fragen selbst zu lösen... so schwer ist das alles nicht
vor allem sowasif (length<3) returnsollte sich schon lösen lassen
-
naja schon ok.
ich verstehs trotzdem nicht. Wenn die Länge 2 ist.
wird die funktion ohne etwas zu sortieren wieder verlassen.
Was soll das ?
-
noobLolo schrieb:
insertionsort läuft von hinten nach vorne, daher auch den sentinel an anfang
sentinel + 1 zahl = 2
der sentinel zählt nicht und eine zahl braucht man nicht sortieren ist das so schwer?
-
aso mit sentinel gerechnet wohl
-
so danke dir. unsere Antworten kamen wohl grade simultan
