template<typename T>
void __merge(T arr[], int left, int mid, int right)
{
T *helper=new T[right - left + 1];
for (int i = left; i <= right; i++)
{
helper[right-left] = arr[i];
}
int i = left, j = mid + 1;
for (int k = left; k <= right; k++)
{
if (i > mid)
{
arr[k] = helper[j - left];
}
else if (j > right)
{
arr[k] = helper[i - left];
}
else if (helper[i - left] < helper[j - left])
{
arr[k] = helper[i - left];
i++;
}
else
{
arr[k] = helper[j - left];
i++;
}
}
}
template<typename T>
void __mergesort(T arr[], int left, int right)
{
if (left >= right)
{
return;
}
int mid = (left + right) / 2;
__mergesort(arr, left, mid);
__mergesort(arr, mid + 1, right);
__merge(arr, left, mid, right);
}
template<typename T>
void mergesort(T arr[], int len)
{
__mergesort(arr, 0, len - 1);
}
生成了1000 0000个1-100之间的随机数,用希尔排序的话大概3s中搞定,归并排序花费的时间为12s,还是希尔排序比较吊=。=