В общем, я студент и у меня проблемы с сортировкой слиянием. Очевидно, что цель состоит в том, чтобы иметь O (n log n), но это больше n ^ 2. Я думаю, что проблема заключается в tempList, как вы увидите в коде, но в описании программы говорится, что нужно использовать static int tempList [LIST_SIZE], чтобы избежать ухудшения качества.
Вот что у меня есть, и время выполнения с использованием start составляет около 16000, что, очевидно, слишком долго для сортировки слияния.
void mergeSort(int randomNum[], int lowIdx, int highIdx)
{
int midIdx;
if (lowIdx < highIdx)
{
midIdx = (highIdx + lowIdx) / 2;
mergeSort(randomNum, lowIdx, midIdx);
mergeSort(randomNum, midIdx + 1, highIdx);
merge(randomNum, lowIdx, midIdx, highIdx);
}
}
Вот вторая порция сортировки
void merge(int randomNum[], int lowIdx, int midIdx, int highIdx)
{
static int tempList[MAX_SORT];
for (int count = 0; count <= highIdx; count++)
tempList[count] = randomNum[count];
int leftIdx = lowIdx,
rightIdx = midIdx + 1,
tempPos = lowIdx;
while (leftIdx <= midIdx && (rightIdx <= highIdx))
{
if (tempList[leftIdx] <= tempList[rightIdx])
{
randomNum[tempPos] = tempList[leftIdx];
leftIdx++;
}
else
{
randomNum[tempPos] = tempList[rightIdx];
rightIdx++;
}
tempPos++;
}
while (leftIdx <= midIdx)
{
randomNum[tempPos] = tempList[leftIdx];
tempPos++;
leftIdx++;
}
while (rightIdx <= highIdx)
{
randomNum[tempPos] = tempList[rightIdx];
tempPos++;
rightIdx++;
}
}
Детали программы заключаются в том, что у нас есть массив со 100000 случайными числами и сортируем его, используя различные алгоритмы сортировки. Другие сорта работают, как ожидалось, но этот, кажется, намного хуже по сравнению с тем, что должно быть большим O.
Может кто-нибудь помочь?