[英]Finding number of inversions in given array
我編寫了以下代碼,通過使用合並排序技術來查找數組 {1,4,2,5,3} 中的反轉。 我一直在盡我所能調試它,但我無法找出我的錯誤(因為 output 不是預期的)。 請幫忙。
請注意:這是出於教育目的,不是任何正在進行的比賽的一部分。
我的代碼:
#include<iostream>
#include<vector>
using namespace std;
int merge(int *arr,int l,int m,int r,int n)
{
int temp[n];
long long count =0;
int i=l;
int j=m+1;
while(i<=m and j<=r)
{
if (arr[i-1]>arr[j-1])
{
count += m-i+1;
temp[i+j-m-2] = arr[j-1];
j++;
}
else
{
temp[i+j-m-2] = arr[i-1];
i++;
}
}
if (i>m)
{
for (int k=j;k<=r;k++)
temp[k-1] = arr[k-1];
}
else
{
for (int k=i;k<=m;k++)
temp[k-1] = arr[k-1];
}
for (int k=l;k<=r;k++)
arr[k-1] = temp[k-1];
return count;
}
int inversions(int *arr, int l,int r,int n)
{
if (l<r)
{
int m=(l+r)/2;
return inversions(arr,l,m,n)+inversions(arr,m+1,r,n)+merge(arr,l,m,r,n);
}
return 0;
}
int main()
{
int arr[5] = {1,4,2,5,3};
cout<<inversions(arr,1,5,5)<<endl;
for (int i=1;i<=5;i++)
cout<<arr[i-1]<<" ";
return 0;
}
我預期的 output:
3
1 2 3 4 5
實際output
2
1 4 2 5 0
我對C++很感興趣,所以我正在學習它。 學習 C++ 已經 1 年了,所以我想我可以幫助你。 你有很多錯誤,但我注意到實際的錯誤是實際的 output。我僅將此代碼用於教育目的,這就是錯誤。 你的實際output不正確實際output是:2 1 4 2 5 264755412
所以您可以再次檢查您的代碼以查看您的錯誤。 Tigran 致以最誠摯的問候。 國家:亞美尼亞 | 地區:埃里溫
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.