我已尝试在StackOverflow上搜索答案并多次使用Google搜索。我不确定代码到底出了什么问题。当我在Eclipse Luna上运行它时,它只是说" solution.exe已停止工作"。任何人都可以帮我找出这里的错误吗?或者给我一个找出自己的方法?
这是我的代码:
#include <fstream>
#include <iostream>
#include <vector>
using namespace std;
long mergeCountInv(long list[],long tmp[],long left,long mid,long right);
long countInv(long list[],long tmp[],long left,long right);
long mergeCountInv(long list[],long tmp[],long left,long mid,long right) {
long i = 0,j = mid + 1,k = 0;
long count = 0;
while(i < mid && j < right) {
if(list[i] <= list[j]) {
tmp[k++] = list[i++];
}
else if(list[i] > list[j]) {
tmp[k++] = list[j++];
count++;
}
}
while(i < mid) {
tmp[k++] = list[i++];
}
while(j < right) {
tmp[k++] = list[j++];
}
return count;
}
long countInv(long list[],long tmp[],long left,long right) {
long k = 0,mid;
if(right == 1) return 0;
else {
mid = (left + right)/2;
k = countInv(list,tmp,left,mid) + countInv(list,tmp,mid + 1,right) + mergeCountInv(list,tmp,left,mid,right);
}
return k;
}
int main() {
long list[100001];
long i,x=0;
///////////////FILE HANDLING////////////////////////////////
ifstream fin;
fin.open("IntegerArray.txt");
while (!fin.eof()) {
fin >> i;
list[x] = i;
x++;
}
fin.close();
////////////////////////////////////////////////////////////
long size = sizeof(list)/sizeof(long) - 1;
long *tmp = new long[size];
cout<<countInv(list,tmp,0,size);
delete []tmp;
return 0;
}
这些是&#34; IntegerArray.txt&#34;的内容:
6
3
5
4
2
1
文件中实际上会有100000个整数,但我先尝试使用较小的测试用例。 非常感谢你的帮助!感谢。
答案 0 :(得分:0)
如果right
大于1,则递归永远不会终止,因为递归的基本情况为right == 1
,而您有一个未经修改的right
递归调用。
即,countInv(x,y,l,r)
调用countInv(x,y,amidpoint,r)
,调用countInv(x,y,anothermidpoint,r)
,依此类推,直到您永远陷入countInv(x,y,r-1,r)
。
究竟如何修复它取决于代码应该做什么,但你很可能想要一个涉及left
以及right
的基本案例。