<span style="font-family:Courier New;font-size:14px;">
</span>
<span style="font-family:Courier New;font-size:14px;">#include <iostream>
#include "inversePairs.h"
using namespace std;
static int times = 0;
void mergeSort(int num[], int start, int end)
{
if (num == nullptr)
{
cout << "invalid input." << endl;
return;
}
else if (end - start == 0)
{
return;
}
else if (end - start > 0 && num != nullptr)
{
int middle = (end + start) / 2;
mergeSort(num, start, middle);
mergeSort(num, middle + 1, end);
times += merge(num, start, end);
}
}
int merge(int num[], int start, int end)
{
if (end - start == 0)
{
return 0;
}
int time = 0;
int middle = (end + start) / 2;
int length1 = middle - start + 1;
int length2 = end - middle;
int left[N / 2], right[N / 2];
int temp[N];
int posLeft = length1 - 1;
int posRight = length2 - 1;
int posTemp = end - start;
for (int i = 0; i < length1; i++)
{
left[i] = num[start + i];
}
for (int i = 0; i < length2; i++)
{
right[i] = num[middle + 1 + i];
}
while (posLeft >= 0 && posRight >= 0)
{
if (left[posLeft] > right[posRight])
{
time += posRight + 1;
temp[posTemp] = left[posLeft];
posLeft--;
posTemp--;
}
else
{
temp[posTemp] = right[posRight];
posRight--;
posTemp--;
}
}
if (posLeft < 0)
{
while (posRight >= 0)
{
temp[posTemp--] = right[posRight--];
}
}
if (posRight < 0)
{
while (posLeft >= 0)
{
temp[posTemp--] = right[posLeft--];
}
}
for (int i = start, j = 0; i <= end; i++, j++)
{
num[i] = temp[j];
}
return time;
}
int main()
{
int num[] = { 7, 5, 6, 4 };
mergeSort(num, 0, 3);
cout << times << endl;
return 0;
}</span>