完全披露,我是一名学生,在合并排序时遇到了问题。目的显然是有一个O(n log n),但它更多n^2。我认为问题存在于tempList中,就像您在代码中看到的那样,但是在程序描述中,它表示使用static int tempList [LIST_SIZE]来避免降级。难以合并排序为O(n日志n)
下面是我所拥有的,使用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应该是什么相比,这似乎有很大的差距。
有人可以帮忙吗?
非常感谢。我知道我的代码是正确的,除了涉及tempList的东西,但不知道哪里出了什么问题。这完全解决了它。 – user2649644 2014-10-02 05:12:58