2016-04-06 10 views
0

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.

+1

'** pom [k ++] **' ist sicherlich nicht korrekt C-Grammatik. – Olaf

+1

Sie werden wahrscheinlich 'memcpy()' verwenden, das nach/von Objekten beliebigen Typs kopieren kann. – EOF

+0

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

Antwort

2

Ja, Sie müssen size Bytes kopieren.

So **pom[k++]** = arr[i++]; wird memcpy(pom + size*(k++), arr+size*(i++), size); und ähnlich für alle anderen.