【发布时间】:2014-10-02 05:02:00
【问题描述】:
完全公开,我是一名学生,在合并排序方面遇到了麻烦。目的显然是有一个 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 个随机数的数组,并使用各种排序算法对其进行排序。其他种类按预期工作,但与 big-O 应该有的相比,这个似乎相差很多。
有人可以帮忙吗?
【问题讨论】:
标签: c++ arrays sorting mergesort