标签:tac 没有 拷贝 .com 正式 \n 策略 rgb 技术分享
在自己摸爬滚打前行或是后退的时候,总会出现很多的惊喜或意外



//归并排序算法
template<typename T>
void __Merge(T arr[], int l, int mid, int r)
{
printf("\n排序函数入口 l = %d, mid = %d, r = %d \n", l, mid, r);
T* aux = new T[r - l + 1]; //创建数组指针,新版可以直接使用变量创建,如下一行代码
//T aux[r - l + 1]; //创建一个数组
for (int i = l; i <= r; i++) //拷贝数组
{
aux[i - l] = arr[i];
printf("拷贝数组a[%d] = arr[%d] = %d \n", i - l, i, arr[i]);
}
int i = l, j = mid + 1; //将数组分成两部分进行比较
for (int k = l; k <= r; k++)
{
//判断位置合法性,左端已遍历结束
if (i > mid)
{
arr[k] = aux[j - l];
j++;
}//判断位置合法性,右端遍历已结束
else if (j > r)
{
arr[k] = aux[i - l];
i++;
}//合法情况,进行比较
else if (aux[i - l] < aux[j - l])
{
arr[k] = aux[i - l];
i++;
}
else
{
arr[k] = aux[j - l];
j++;
}
}
delete []aux;
}
template<typename T>
void __MergeSort(T arr[], int l, int r)
{
if (l >= r)
return;
int mid = (l + r) / 2;
__MergeSort(arr, l, mid);
__MergeSort(arr, mid + 1, r);
__Merge(arr, l, mid, r);
}
template<typename T>
void MergeSort(T arr[], int n)
{
__MergeSort(arr, 0, n - 1);
}
标签:tac 没有 拷贝 .com 正式 \n 策略 rgb 技术分享
原文地址:https://www.cnblogs.com/cyhezt/p/9753805.html