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

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