我删除了代码,因为它是作业。如果您确实需要帮助,您可以查看我与George B(下文)或PM me的讨论。
该程序退出很长时间(包括其他内容),但输入是随机生成的....
我花了几个小时跟踪代码,仍然无法找出任何错误.... 适量对于专业人士而言可能非常容易,所以我希望收到有关此实施的建议......
感谢任何输入!
问:什么是“随机”?
答:包括一部分代。
void randomArray(unsigned long*& A, unsigned long size)
{
//Note that RAND_MAX is a little small for some compilers (2^16-1).
//In order to test our algorithms on large arrays without huge
//numbers of duplicates, we'll set the high-order and low-order
//parts of the return value with two random values.
A = new unsigned long[size];
for(unsigned long i=0; i<size; i++)
A[i] = (rand()<<16) | (rand());
//Another note: initially, if you want to test your program out with smaller
//arrays and small numbers, just reduce A[i] mod k for some small value k as in the following:
//A[i] = rand() % 16;
//this may help you debug at first.
}
问:出现什么样的错误?
好吧,我没有收到编译错误。没有Q.S.,我可以运行其他四种排序算法而没有问题(我可以连续运行排序)。当Q.S被激活时,在运行程序一到两次或三次之后,甚至在第一次运行时,程序结束(我正在使用Eclipse,因此控制台结束)。
输入元素数量,或者a 退出的负数:5 {some 阵列}
选择排序花了0秒。合并 排序花了0秒。快速排序花了0 秒。堆排序耗时0秒。 铲斗排序花了0秒。 {输出 5个排序的数组}
输入元素数量,或者a 退出的负数:6 {some 阵列}
选择排序花了0秒。合并 排序花了0秒。快速排序花了0 秒。堆排序耗时0秒。 铲斗排序需要0秒。
{5个排序数组的输出}
输入元素数量,或者a 要退出的负数:8 {arrays} ---控制台结束---
同样,问题是它经常崩溃,所以这表明访问违规的可能性很高,但是做了10多次追踪我没有看到问题....(也许我超载了我的大脑堆栈 - _ - )
感谢。
答案 0 :(得分:1)
提示:
q is unsigned (the result of the partition function)
so, q-1 is also unsigned
what if q is zero?
(这是作业,所以你必须弄清楚我猜:))
答案 1 :(得分:0)
使用数组{2,5,2}
跟踪算法。显然,只要列表中有重复的数字,您的程序就会崩溃。分区的第一次调用将返回2
作为r
的索引。因此,quickSort(A,3,2)
的第二次调用将访问不在数组边界内的存储器位置。总是一个好主意是手动对数组进行边界检查并生成可理解的输出,以便更容易地跟踪和调试程序。