Хорошо, мой вопрос состоит в том, чтобы найти количество инверсий в заданном массиве.Алгоритм сортировки и инверсии слияния
После прочтения алгоритма инверсии я понял, что мне просто нужно добавить 1 строку кода в алгоритм mergesort, который я написал несколько дней назад.
Это работало отлично для небольших размеров массива, но как-то, когда я масштабированием массив Шифрование до 100000 чисел, ответ неверен
Вот функция слияния, к которому я добавил, что одна строка.
int merge(int arr[],int low,int mid,int high)
{
int i,j,k;
int arr1[11];
int arr2[11];
for(i=0;i<mid-low+1;i++)
arr1[i]=arr[low+i];
for(j=0;j<high-mid;j++)
arr2[j]=arr[mid+1+j];
arr1[i]=9999999;
arr2[j]=9999999;
i=0;
j=0;
for(k=low;k<=high;k++)
{
if(arr1[i]<=arr2[j])
{
arr[k]=arr1[i];
i++;
}
else
{
{
arr[k]=arr2[j];
j++;
count=count+mid-low+1-i; //Inversion counter.
}
}
}
return(0);
}
Может кто-нибудь скажет мне, что с этим не так?
Я потратил часы, пытаясь понять это, но им не повезло. Любой вход был бы оценен. Благодаря!
'assert (mid-low + 1) <= 10' и аналогичный для j, mid, high. – wildplasser
Прошу прощения, я только что редактировал код. Я только понял, что запись i
Первые две петли 'for (i = 0; i
wildplasser