hallo,
für einfache Sortierzwecke kurzer Arrays verwende ich gern den Bubblesort (ansonsten Shellsort oder Quicksort).
Nun brauche ich bislang immer 2 getrennte Funktionen, eine für int32, eine für double.
Wie macht man es "schöner" mit C oder C++, dass man für beliebige (!) Datentypen im selben (!) Programm nur 1 Algorithmus braucht, evtl. auch für char*, int16_t* und float* ? (Ich arbeite mit der Arduino IDE auf 8-bit AVR und 32-bit ARM/ESP-Plattformen.)
Erste "Ideen" wären mit overloading oder mit void *array, ersteres habe ich aber noch nie gemacht und letzteres könnte zu kompliziert in der Programmierung werden, fürchte ich, etwa z.B.Code:void bubblesortn(int32_t *array, int length) { int32_t tmp; for (int i=0; i<length-1; i++) { for (int j=0; j<length-i-1; j++) { if (array[j] > array[j+1]) { tmp = array[j]; array[j] = array[j+1]; array[j+1] = tmp; } } } } void bubblesortd(double *array, int length) { double tmp; for (int i=0; i<length-1; i++) { for (int j=0; j<length-i-1; j++) { if (array[j] > array[j+1]) { tmp = array[j]; array[j] = array[j+1]; array[j+1] = tmp; } } } }
void bubblesort (void *array , size_a length, size_a varsize, f_compare) // wie bei Quicksort-Implementierung
- nur die zusätzlich nötigen f_compare() Funktionen für alle Var-Typen machen es dann unterm Strich sicher auch nicht einfacher....
Auch von "Prototypen" habe ich mal was gelesen - wäre das besser und einfacher?
- - - Aktualisiert - - -
update:
habe mal ganz ohne Hoffnung, dass es klappen könnte, beide Funktionen mit unterschiedlichen Datentypen unter demselben Funktionsnamen deklariert -
überraschenderweise meckert der Compiler gar nicht und er scheint das völlig automatisch zu overloaden... das wär ja ungeahnt simpel...!
Code:void bubblesort(int32_t *array, int length) { int32_t tmp; for (int i=0; i<length-1; i++) { for (int j=0; j<length-i-1; j++) { if (array[j] > array[j+1]) { tmp = array[j]; array[j] = array[j+1]; array[j+1] = tmp; } } } } void bubblesort(double *array, int length) { double tmp; for (int i=0; i<length-1; i++) { for (int j=0; j<length-i-1; j++) { if (array[j] > array[j+1]) { tmp = array[j]; array[j] = array[j+1]; array[j+1] = tmp; } } } }







Zitieren
Lesezeichen