Ich mache einen Bericht über verschiedene Sortieralgorithmen in C++. Was mich verwirrt ist, dass mein Mergesort in beiden Sprachen langsamer als Heapsort zu sein scheint. Was ich gesehen habe ist, dass Heapsort langsamer sein soll.Mergesort-Implementierung ist langsam
mein Mergesort sortiert ein unsortiertes Array mit der Größe 100 000 mit einer Geschwindigkeit von 19,8 ms, während heapsort es bei 9,7 ms sortiert. Der Code für meine mergesort Funktion in C++ ist wie folgt:
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);
}
}
Sie vergeben. Nicht. – BeyelerStudios
Woher hast du wissen, dass Heap-sort langsamer ist als merge-sort? Der zusätzliche Kopiervorgang der Zeit linear in der Nr. von Elementen des Sub-Array, ist nicht in der Heap-Sortierung. Das verwendet ziemlich genauen Raum und nur optimale Stoffe, wie sollte das teurer sein? –
Aus der großen o-Notation scheint es, dass Heapsort langsamer sein soll. – FYOL