先把代码贴上
int merge_sort(int *A,int x,int y,int *T) //[x,y)
{
int m,l,r,i,count = 0;
if(y - x == 1) return 0;
m = x + (y-x)/2;
count += merge_sort(A,x,m,T); //左半区间排序
count += merge_sort(A,m,y,T); //右办区间排序
l = x; r = m; i = x;
while(l < m|| r < y)
{
if(r >= y ||(l < m && A[l] <= A[r]))
T[i++] = A[l++];
else
{
T[i++] = A[r++];
count += m - l;
}
}
for(i = x;i < y;i++)
A[i] = T[i];
return count;
}
//快速排序
void Quicksort(int *A,int x,int y) //[x,y)
{
if(y - x <= 1) return;
int i,j,key,buf;
key = A[x];
i = x,j = y-1;
while(i != j) //分成[x,i),[i,y)两部分
{
while(A[j] > key && i != j) j--;
{buf = A[j];A[j] = A[i];A[i] = buf;}
while(A[i] < key && i != j) i++;
{buf = A[j];A[j] = A[i];A[i] = buf;}
}
Quicksort(A,x,i);
Quicksort(A,i+1,y); //必须是[i+1,y),不能是[i,y)
}