我想通過計算開始和結束索引將數組拆分成n個相等部分。開始和結束元素的地址將被傳遞給一個將對這些數組進行排序的函數。例如,如果arraySize = 1000,並且n = 2,則索引將爲0,499,999。到目前爲止,我有下面的代碼,但對於奇數n,它將它分割成多於n個數組。我認爲這樣做的另一種方式是循環運行n次,但我不知道從哪裏開始。將C數組拆分爲n等分
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);
}
編輯:這裏是別的東西,我想出了。它似乎在工作,但我需要做一些更徹底的測試。我已經多次繪製並手工追蹤。希望沒有任何邊緣案例會失敗。我已經限制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,並且n = 2,索引將爲0,499,999」在這個pkease上拋出更多的光 – nullpointer
您可以在循環體的每一行中向結尾添加+ 1,然後在InsertionSort調用中從'end'減1。 'end = start + chunkSize'; 'end> arraySize'; 'end = arraySize'; 'InsertionSort(&數組[開始],結束)'。因此你會失去一大堆 - 1和+ 1的噪音。 – Kaz
對不起,固定arraySize爲1000. – Shan