网站图片尺寸大小,网页制作工具按其制作方式分可以分为,苏州住房与城乡建设局网站,深圳网站制作建设归并排序
基于分而治之的思想#xff0c;拿两个已经有序的序列重新组合成一个新的有序序列.
这是一个简单的合并函数#xff0c;需要两个序列都有序 //默认a和b数组都是有序的
//temp为一个数组的首地址
void mergeSort(int a[],int,alen,int b[],int blen,int* temp){int …归并排序
基于分而治之的思想拿两个已经有序的序列重新组合成一个新的有序序列.
这是一个简单的合并函数需要两个序列都有序 //默认a和b数组都是有序的
//temp为一个数组的首地址
void mergeSort(int a[],int,alen,int b[],int blen,int* temp){int i0;int j0;int k0;while(ialenjblen){if(a[i]b[j])//比大小谁小先放谁在前{temp[k]a[i];k;i;}else{temp[k]b[j];k;j;}}while(ialen){temp[k]a[i];k;//若是一方走完还有一方剩下了并且有序那就意味着剩下的有序序列都比已经合并的最大的大依次将剩余的数放到其中就行i;}while(jblen){temp[k]b[j];k;j;}}简洁一下代码 void mergeSort(int a[],int,alen,int b[],int blen,int* temp){int i0;int j0;int k0;while(ialenjblen)temp[k]a[i]b[j]?a[i]:b[j];while(ialen)temp[k]a[i];while(jblen)temp[k]b[j];}最终版 //合并函数
//merge用于合并
void merge(int arr[],int low.int mid,int height,int* temp){//low~midmid1~height分别为合并的两组int ilow;int jmid1;int klow;while(imidjheight)temp[k]arr[i]arr[j]?arr[i]:arr[j];while(imid)temp[k]arr[i];while(jheight)temp[k]arr[j];for(ilow;iheight;i)arr[i]temp[i];
}//归并法用的是分治思想先分后治
//merge_sort用于分割
void merge_sort(int arr[],int low,int height,int *temp){//取中间位置设为mid//low~mid为一组mid1~height为一组//依次以每组边界带入递归继续分割//直到每组只剩一个数然后递归开始返回//从底层开始最终到两个有序的序列//再将两个有序的序列合并即得到最终排好序的序列if(lowheight)return;int midlow(height-low)1;merge_sort(arr,low,mid,temp);merge_sort(arr,mid1,height,temp);merge(arr,low,mid,height,temp);}//mergeSort会和merge_sort和merge,并开辟temp空间
void mergeSort(int arr[],int length){int *temp(int *)malloc(sizeof(int)*length);//向内存开辟一个length长度sizeof(int)*length大小的空间assert(temp);//断言assert是一个调试程序时经常使用得宏在程序运行时计算括号内的表达式如果为false(0),程序将报告错误并终止执行若不为零继续执行后面的语句。
//主要用于判断是否出现了非法数据merge_sort(arr,0.length-1,temp);free(temp);//free与malloc搭配使用一个用于开辟空间一个用于释放空间
}