代码:
#include<iostream> using namespace std; int count=0;//新增 void Merge(int* A,int left,int mid,int right,int* C) { //Merge可以将两个有序的数组排好序,时间复杂度:o(n) int i=left; int j=mid+1; int k=left; while(i <= mid && j <= right) { if(A[i] <= A[j]) C[k++]=A[i++]; else { C[k++]=A[j++]; count += mid-i+1;//新增 } } while(i <= mid) C[k++]=A[i++]; while(j <= right) C[k++]=A[j++]; //C[]已经有序,将C[]中数据复制回原数组A[] for(int i=left;i <= right;++i) A[i]=C[i]; } void MergeSort(int* A,int left,int right,int* C)//假定MergeSort能将一个乱序数组A排好序. { if(left < right) { int mid=(left+right)/2; MergeSort(A,left,mid,C);//排好一个数组1 MergeSort(A,mid+1,right,C);//排好一个数组2 Merge(A,left,mid,right,C); //合并两个有序的数组 } } void main() { int A[]={2,1,3,6,4,0,11,3,5}; int len=sizeof(A)/sizeof(A[0]); int *C=new int[len]; MergeSort(A,0,len-1,C); for(int i=0;i<len;++i) cout<<A[i]<<' '; cout<<endl; cout<<count<<endl; delete[] C; }