归并排序的一些性质
- 归并排序是一种稳定的排序。
- 归并排序时间复杂为O(n*log2n)//log以2为底。空间复杂度为O(n)。
- 假设有n个待排列的元素,需要log2n//log以2为底向上取整次。例如10个元素需要4次。
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/b6911fef2c6ca740690075b1a343d19a.jpeg)
#include<stdio.h>
#define LENGTH 8
void Merge(int A[],int low,int mid,int high){
int B[high];
for(int i=low;i<=high;i++)
B[i]=A[i];
int i=low,j=mid+1,k=low;
while(i<=mid && j<=high){
if(B[i]>B[j])
A[k++]=B[j++];
else
A[k++]=B[i++];
}
while(i<=mid)A[k++]=B[i++];
while(j<=high)A[k++]=B[j++];
}
void MergeSort(int A[],int low,int high){
if(low<high){
int mid=(low+high)/2;
MergeSort(A,low,mid);
MergeSort(A,mid+1,high);
Merge(A,low,mid,high);
}
}
int main(){
int A[LENGTH]={5,7,3,0,6,-1,9,1};
printf("排序前 : ");
for(int i=0;i<LENGTH;i++)
printf("%4d",A[i]);
MergeSort(A,0,LENGTH-1);
printf("\n");
printf("排序后 : ");
for(int i=0;i<LENGTH;i++)
printf("%4d",A[i]);
}