Ich versuche, ein Array in n gleiche Teile durch Berechnung der Start- und Ende-Indizes zu teilen. Die Adresse der Start- und Endelemente wird an eine Funktion übergeben, die diese Arrays sortiert. Zum Beispiel, wenn ArraySize = 1000, und n = 2, sind die Indizes 0, 499, 999. Bis jetzt habe ich den folgenden Code, aber für ungerade n, es teilt es in mehr als n Arrays. Eine andere Möglichkeit, dies zu tun, ist, n mal durch die Schleife zu laufen, aber ich bin mir nicht sicher, wo ich anfangen soll.Geteiltes C-Array in n gleiche Teile
int chunkSize = arraySize/numThreads;
for (int start = 0; start < arraySize; start += chunkSize) {
int end = start + chunkSize - 1;
if (end > arraySize - 1) {
end = arraySize - 1;
}
InsertionSort(&array[start], end - start + 1);
}
EDIT: Hier ist etwas, das ich mit aufkommen. Es scheint zu funktionieren, aber ich muss etwas gründlicher testen. Ich habe es mehrmals herausgesucht und es von Hand verfolgt. Hoffentlich gibt es keine Randfälle, die scheitern werden. Ich beschränke bereits n> = arraySize.
int chunkSize = arraySize/numThreads;
for (int i = 0; i < numThreads; i++) {
int start = i * chunkSize;
int end = start + chunkSize - 1;
if (i == numThreads - 1) {
end = arraySize - 1;
}
for (int i = start; i <= end; i++) {
printf("%d ", array[i]);
}
printf("\n");
}
"arraySize = 2, und n = 2, die Indizes werden 0, 499, 999" werfen mehr Licht auf diese Pkease – nullpointer
Sie können + 1 zu "Ende" in jeder Zeile im Körper der Schleife hinzufügen, und dann subtrahiere 1 vom 'Ende' im 'InsertionSort'-Aufruf. 'end = start + chunkSize'; 'end> arraySize'; 'end = arraySize'; 'InsertionSort (& array [start], end)'. Dadurch verlieren Sie eine ganze Reihe von - 1 und + 1 Rauschen. – Kaz
Sorry fixed arrayGröße, um 1000 zu sein. – Shan