1.归并排序 时间复杂度O(nlogn) 辅助空间O(n) 稳定
void merge_sort(int *A,int x,int y,int *T) //对数组A [x,y)排序 数组T是辅助空间
{
if(y-x>=2) //至少有两个元素才排序
{
int m=x+(y-x)/2; //第一步划分
int p=x,q=m,i=x;
merge_sort(A,x,m,T); //第二步递归求解
merge_sort(A,m,y,T);
while(p<m||q<y) //第三步合并
{
if(q>=y||(p<m&&A[p]<=A[q]))
T[i++]=A[p++];
else
T[i++]=A[q++];
}
for(i=x;i<y;++i) //从辅助空间复制回A数组
A[i]=T[i];
}
}
2.快速排序 时间复杂度O(nlogn) 辅助存储O(logn) 不稳定
void QuickSort(int A[],int p,int r) //对数组A [p,r]
{
if(p<r) //至少有两个元素
{
int q=Partition(A,p,r);