l & h соответствует индексам 1-го & Последние элементы в массиве a: - Индивидуальные разделы и функции слияния работают хорошо. Объясните ошибку, возникающую при связывании двух функций.Не удается обнаружить ошибку в Mergesort
#include <stdio.h>
void mergesort(int a[], int l, int h);
void merge (int a[], int l, int m, int h);
int main()
{
int a[] = {5,4,9,0,8,6,1,3,2,7}, i;
mergesort (a, 0, 5);
for (i = 0; i < 10; i++)
printf ("%d ", a[i]);
return 0;
}
void mergesort(int a[], int l, int h)
{
if (l == h)
return;
int m = (l + h)/2;
mergesort (a, l, m);
mergesort (a, m + 1, h);
merge(a, l, m, h);
}
void merge (int a[], int l, int m, int h)
{
int t[h - l + 1], i = l, j = m + 1, k = 0;
while (i <= m && j <= h) {
if (a[i] < a[j]){
t[k] = a[i];
k++;
i++;
}
if (a[j] < a[i]) {
t[k] = a[j];
j++;
k++;
}
}
if (i != m) {
while (i <= m) {
t[k] = a[i];
k++;
i++;
}
}
if (j != h) {
while (j <= h) {
t[k] = a[j];
k++;
j++;
}
}
for (i = 0; i <= (h - l); i++)
a[l + i] = t[i];
}
Вместо желаемого выхода
0 4 5 6 8 9 1 3 2 7
(элементы от 0 до 5 включительно стали отсортированы), она производит некоторое количество мусора вроде
0 4 6 9 2686712 32 1 3 2 7
Добро пожаловать в SO !! Пожалуйста, отформатируйте свой код. –
Можете ли вы хотя бы объяснить, почему это не работает, ввод, вывод и ожидаемый результат? –