归并排序算法图解,其实就是利用分而治之分之思想来解决。递归的解决左半部分,然后递归的解决右半部分。当左半部分的元素单位为一个的时候然后比较交换,为2的时候左右两边比较交换,这样一层层的弹出递归。看下面动态图
void merge(int a[],int tmp[],int left,int right,int rightend)
{
int leftend=right-1
int tmpa=left
int len=rightend-left+1
while(left<=leftend&&right<=rightend)
{
if(a[left]<=a[right])
{
tmp[tmpa++]=a[left++]
}else if(a[right]<a[left])
{
tmp[tmpa++]=a[right++]
}
}
while(left<=leftend)
{
tmp[tmpa++]=a[left++]
}
while(right<=rightend)
{
tmp[tmpa++]=a[right++]
}
for(int i=0
{
a[rightend]=tmp[rightend]
}
}
void print(int len,int data[])
{
for(int i=0
{
printf("%d\t",data[i])
}
}
int main()
{
int a[10]={3,7,13,15,19,21,10,13,17,19,}
int left=0
int r=6
int rightend=9
int tmp[12]={}
merge(a,tmp,left,r,rightend)
int len=sizeof(a)/sizeof(a[0])
print(len,a)
}