我正在尝试使用Hoare分区实现快速排序算法,该算法可以使用大量数组。它适用于小型阵列,但是在创建大型阵列时,应用程序会停止工作。有人可以帮忙吗?
实施如下: QuickSort.h
void SerialQuicksort(T* first, T* last, T* myArray, int size) {
if (last - first>1) {
T* mid = ModifiedHoare(myArray, first, last);
SerialQuicksort(first, mid+1, myArray, size);
SerialQuicksort(mid+1, last, myArray, size);
}
}
分区功能:
int* ModifiedHoare(int* a, int* p, int* r)
{
if (*p>*r)
swapp(p, r); // Sentinel at both ends
int x = *p; // x stores the pivot and location p is vacant now.
while (1)
{
do{
*r--;
} while (*r>x); // search the smaller element in right
// portion.
*p = *r; // location r is vacant now.
do{
*p++;
} while (*p<x); // search the larger element in left portion.
if (p<r)
*r = *p; // location p is vacant now.
else{
if (*(r + 1) <= x)
r++;
*r = x;
return r; // return the location of the pivot
}
}
}
inline void swapp(int* x, int* y)
{
int temp = *x;
*x = *y;
*y = temp;
}
测试 - 主要
#define SIZE 20000
int* myArray = new int[SIZE];
for (int i = 0; i < SIZE; i++)
{
*(myArray + i) = rand();
}
parallelQuick.SerialQuicksort(&myArray[0], &myArray[SIZE-1], myArray, SIZE);
调试应用程序时,会出现以下异常:
访问冲突写入位置0x00140F64
#define SIZE 356
答案 0 :(得分:0)
您可以通过将堆栈保留大小(在配置属性&gt;链接器&gt;系统中)设置为更高的值来增加堆栈大小,但如果递归太深,这将无济于事。