Итак, мой код сортировки слиянием сработал, а затем я начал получать ошибки, когда пытался определить время выполнения.Теперь я получаю 'массив был поврежден', и я думаю, что это потому, что после инициализации 'left_bound' и 'right_bound' значения не изменятся, даже если я почти уверен, что назначаю их правильно.Таким образом, они представляют собой какое-то огромное отрицательное число, выходящее за пределы массива, что приводит к его повреждению (я думаю).
Я пытался назначить и инициализировать всеми возможными способами, которые я могу найти в Google.
void merge(int arr[], int low_idx, int partition, int high_idx) {
int i, j, k, right_bound;
int left_bound (partition - low_idx + 1);
right_bound = (high_idx - partition);
//temporary arrays
int* left_of_partition = NULL;
int* right_of_partition = NULL;
left_of_partition = new int[left_bound];
right_of_partition = new int[right_bound];
for (i = 0; i < left_bound; i++) {
left_of_partition[i] = arr[i + low_idx];
}
for (j = 0; j < right_bound; j++) {
right_of_partition[j] = arr[partition + 1 + j];
}
i = 0;
j = 0;
k = 1;
while (i < left_bound && j < right_bound) {
if (left_of_partition[i] < right_of_partition[j]) {
arr[k] = left_of_partition[i];
i++;
}
else {
arr[k] = right_of_partition[j];
j++;
}
k++;
}
while (i < left_bound) {
arr[k] = left_of_partition[i];
i++;
k++;
}
while (j < right_bound) {
arr[k] = right_of_partition[j];
j++;
k++;
}
delete[] left_of_partition;
delete[] right_of_partition;
left_of_partition = NULL;
right_of_partition = NULL;
}
void mergesort(int arr[], int low_idx, int high_idx)
{
if (high_idx > low_idx) {
int partition = (low_idx + high_idx) / 2;
mergesort(arr, low_idx, partition);
mergesort(arr, partition + 1, high_idx);
merge(arr, low_idx, partition, high_idx);
}
}
int main()
{
int v2[] = { 9,8,7,6,5,4,3,2,1,0 };
int max_idx = sizeof(v2) - 1;
mergesort(v2, 0, max_idx);
}