完全披露,我是一名學生,在合併排序時遇到了問題。目的顯然是有一個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