您的位置:首页 > Web前端

[剑指offer]数组中的逆序对

2016-04-07 16:02 513 查看
/*
36:> 数组中的逆序对
(7,4)前比后大  叫逆序对
*/

int InversePairsCore(int data[], int copy[], int start, int end);

int InversePairs(int data[],int len)
{
if (data == NULL || len < 0)
return 0;

int* copy = new int[len];
for (int i = 0; i < len; ++i)
copy[i] = data[i];

int count = InversePairsCore(data, copy, 0, len - 1);
delete[]copy;

return count;
}

int InversePairsCore(int data[], int copy[], int start, int end)
{
if (start == end)
{
copy[start] = data[start];
return 0;
}

int length = (end - start) / 2;

int left = InversePairsCore( copy, data,start, start + length);
int right = InversePairsCore(copy, data, start+length+1, end);

int i = start + length;
int j = end;
int indexCopy = end;
int count = 0;

while (i>=start && j>=start+length+1)
{
if (data[i] > data[j])
{
copy[indexCopy--] = data[i--];
count += j - start - length;
}
else
copy[indexCopy--] = data[j--];
}

for (; i >= start; --i)
copy[indexCopy--] = data[i];

for (; j >= start + length + 1; --j)
copy[indexCopy--] = data[j];

return left + right + count;
}

//void test()
//{
//  int ar[4] = {7,5,6,4};
//  cout << InversePairs(ar, 4) << endl;
//}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: