Ich versuche, ein "generischen" MergeSort in C zu kodieren bis:generic MergeSort in C kann nicht Wert zuweisen void *
void mergeSort(void *arr, int begin, int end,int size,
int (*comp)(void *, void *));
Aber da Sie eine Halter/temp Array benötigen, wird es ein bisschen schwierig. Ich bin nicht sicher, wie die Werte für diese Array zuweisen, da ich es als eine Lücke geschaffen * Array:
int mid = (begin + end)/2;
int len = end - begin + 1;
void *pom = malloc(len*size);
Aber ich kann nicht Wert zuweisen zu diesem Array, gibt es eine Möglichkeit, um es?
i = begin, j = mid + 1, k = 0;
while (i <= mid && j <= end)
**pom[k++]** = ((*comp)((char*)arr + i*size, (char *)arr + j*size) <= 0) ? arr[i] : arr[j];
while (i <= mid)
**pom[k++]** = arr[i++];
while (j <= end)
**pom[k++]** = arr[j++];
Die fett gedruckten Zeilen geben einen Fehler ab.
'** pom [k ++] **' ist sicherlich nicht korrekt C-Grammatik. – Olaf
Sie werden wahrscheinlich 'memcpy()' verwenden, das nach/von Objekten beliebigen Typs kopieren kann. – EOF
Hinweis: Beginnen Sie mit der Sortierung eines Arrays von String-Zeigern. Schritt 2: Ändern Sie es in ein Array von ungültigen Zeigern. Schritt 3) ändere sie in void-Zeiger, die auf Nicht-Strings zeigen (zB: structs). Schritt 4) ändern Sie es in ein Array von beliebigen Objekten, zB Strukturen. – wildplasser