// 采用递归的方法实现归并排序,作者:C语言技术网(www.freecplus.net)码农有道。 #include #include #include // 采用递归的方法实现归并排序函数。 // arr-待排序数组的首地址,arrtmp-用于排序的临时数组的首地址 // start-排序区间第一个元素的位置,end-排序区间最后一个元素的位置。 void _mergesort(int *arr,int *arrtmp,int start,int end) { // 如果start>=end,表示该区间的元素少于两个,递归终止。 if (start>=end) return; int mid=start+(end-start)/2; // 计算排序区间中间的位置。 int istart1=start,iend1=mid; // 区间左边元素的第一和最后一个元素的位置。 int istart2=mid+1,iend2=end; // 区间右边元素的第一和最后一个元素的位置。 _mergesort(arr,arrtmp,istart1,iend1); // 对区间左边元素递归排序。 _mergesort(arr,arrtmp,istart2,iend2); // 对区间右边元素递归排序。 int ii=start; // 已排序数组arrtmp的计数器。 // 把区间左右两边数列合并到已排序数组arrtmp中。 while (istart1<=iend1 && istart2<=iend2) arrtmp[ii++]=arr[istart1]