Хорошо, мой вопрос, чтобы найти количество инверсий в данном массиве.
Прочитав алгоритм инверсии, я понял, что мне просто нужно добавить 1 строку кода в алгоритм слияния, который я написал несколько дней назад.
Это отлично работает для небольших размеров массива, но почему-то, когда я масштабирую массив до 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);
}
Может кто-нибудь сказать мне, что не так с этим?
Я часами пытался это выяснить, но мне не повезло. Любой вклад будет оценен. Спасибо!