Iam在C++中执行关于不同排序算法的报告。让我感到困惑的是,我的mergesort似乎比两种语言的heapsort都慢。我所看到的是heapsort应该会变慢。Mergesort执行速度很慢
我的mergesort以19.8毫秒的速度排序一个大小为100 000的未排序数组,同时heapsort将它排序为9.7 ms。在C++我的归并函数的代码如下:
void merge(int* array, int low, int mid, int high)
{
int i, j, k;
int lowLength = mid - low + 1;
int highLength = high - mid;
int* lowArray = new int[lowLength];
int* highArray = new int[highLength];
for (i = 0; i < lowLength; i++)
lowArray[i] = array[low + i];
for (j = 0; j < highLength; j++)
highArray[j] = array[mid + 1 + j];
i = 0;
j = 0;
k = low;
while (i < lowLength && j < highLength)
{
if (lowArray[i] <= highArray[j])
{
array[k] = lowArray[i];
i++;
}
else
{
array[k] = highArray[j];
j++;
}
k++;
}
while (i < lowLength)
{
array[k] = lowArray[i];
i++;
k++;
}
while (j < highLength)
{
array[k] = highArray[j];
j++;
k++;
}
}
void mergeSort(int* array, int low, int high)
{
if (low < high)
{
int mid = low + (high - low)/2;
mergeSort(array, low, mid);
mergeSort(array, mid + 1, high);
merge(array, low, mid, high);
}
}
您正在分配。别。 – BeyelerStudios
从哪里知道堆排序比合并排序慢?时间线性的额外拷贝操作在no。子数组的元素在堆中不存在。这使用相当精确的空间,只有最佳的东西,如何COM应该更昂贵? –
从大o符号看来,heapsort应该会变慢。 – FYOL