#include<stdio.h>
#include<stdlib.h>
#define INFINITE 65535
void merge(int array[],int low,int mid,int high)
{
int n1,n2,i,j,k;
n1=mid-low+1;
n2=high-mid;
int *La=(int *)malloc(sizeof(int)*(n1+1));//将数组分成左右2部分分治思想
int *Ra=(int *)malloc(sizeof(int)*(n2+1));
for(i=0;i<n1;i++)
La[i]=array[low+i];
for(j=0;j<n2;j++)
Ra[j]=array[mid+j+1];
La[n1]=INFINITE; /*将最后那个数设为无穷大*/
Ra[n2]=INFINITE;
i=j=0;
for(k=low;k<=high;k++){ /*归并*/
if(La[i]<Ra[j])
array[k]=La[i++];
else
array[k]=Ra[j++];
}
free(La);
free(Ra);
}
void merge_sort(int array[],int low,int high)
{
int mid;
if(low<high){
mid=(high+low)/2;
merge_sort(array,low,mid);
merge_sort(array,mid+1,high);
merge(array,low,mid,high);
}
}
int main(int argc,char *argv[])
{
int array[10]={8,2,3,6,5,9,4,1,0,7},i;
merge_sort(array,0,9);
for(i=0;i<10;i++)
printf("%d ",array[i]);
putchar('\n');
return 0;
}
<菜鸟学算法-A排序(分治的思想:归并排序)>
最新推荐文章于 2023-03-15 00:08:21 发布