归并排序

来源:互联网 发布:网上怎么开淘宝网店 编辑:程序博客网 时间:2024/06/10 18:52
/*=============================================================================##   分治为子序列#          归并排序##=============================================================================*/#include <stdio.h>#include <time.h>#include <malloc.h>int arr[]={6, 3, 5, 7, 2, 4, 1, 8, 10, 9};//把数组合并void merg_array(int *a1,int len1,int *a2,int len2){int i=0,j=0,k=0;int *arr_temp=(int *)malloc(sizeof(int)*(len1+len2));while(i<len1&&j<len2)arr_temp[k++]=a1[i]<a2[j]? a1[i++]:a2[j++];//a2已经为空,把a1中剩余的数搬到arr_temp中去就可以了while(i<len1)arr_temp[k++]=a1[i++];while(j<len2)arr_temp[k++]=a2[j++];for(i=0,k=0;i<len1+len2;++i,++k)a1[i]=arr_temp[k];free(arr_temp);}//void merg_sort(int *a,int len){//结束条件if(len<=1)return;int *a1,*a2,len1,len2;len1=len/2;len2=len-len1;a1=a;a2=a+len1;//分治调用merg_sort(a1,len1);merg_sort(a2,len2);//分治结束,合并两个子数组merg_array(a1,len1,a2,len2);}int main(){int len=sizeof(arr)/sizeof(arr[0]);merg_sort(arr,len);for(int i=0;i<len;++i)printf("%d ",arr[i]);return 0;}

0 0
原创粉丝点击