比归并排序只多了一句输出。
#include <iostream>
using namespace std;
void getInversePair(int* a, int* b, int low, int mid, int high)
{
int l=low, m=mid+1, k=low, j;
while(l<=mid && m<=high)
{
if(a[l]>a[m])
{
for(j=l; j<=mid; j++)
cout<<"("<<a[j]<<","<<a[m]<<")\t";
b[k++] = a[m++];
}
else
b[k++] = a[l++];
}
while(l<=mid)
b[k++] = a[l++];
while(m<=high)
b[k++] = a[m++];
for(j=low; j<=high; j++)
a[j] = b[j];
}
void inversePair(int* a, int* b, int low, int high)
{
if(low<high)
{
int mid = (low+high)/2;
inversePair(a, b, low, mid);
inversePair(a, b, mid+1, high);
getInversePair(a, b, low, mid, high);
}
}
int main()
{
int a[5] = {7,5,6,4,2};
int b[5];
inversePair(a, b, 0, 4);
cout<<endl;
return 0;
}