JAVA快速排序的一些问题,java.lang.StackOverflowError
第一个问题,用程序中固定的数据,排序有问题,下面红色的圈起来的。第二个问题,如果产生随机数,把len设置成1000或者更大,就提示超过内存了,这不科学啊,我内存是4G的,...
第一个问题,用程序中固定的数据,排序有问题,下面红色的圈起来的。
第二个问题,如果产生随机数,把len设置成1000或者更大,就提示超过内存了,这不科学啊,我内存是4G的,以前能运行2000万个数的排序才会提示内存溢出
源代码如下:
代码我传到百度云盘了,下载来看下嘛,谢谢 http://pan.baidu.com/s/1qWCqx9U
谢谢大家帮忙,我已经找到问题了,括号位置写错了 展开
第二个问题,如果产生随机数,把len设置成1000或者更大,就提示超过内存了,这不科学啊,我内存是4G的,以前能运行2000万个数的排序才会提示内存溢出
源代码如下:
代码我传到百度云盘了,下载来看下嘛,谢谢 http://pan.baidu.com/s/1qWCqx9U
谢谢大家帮忙,我已经找到问题了,括号位置写错了 展开
3个回答
展开全部
class QuickSort {
public int getMiddle(int[] list, int low, int high) {
int tmp = list[low]; //数组的第一个作为中轴
while (low < high) {
while (low < high && list[high] >= tmp) {
high--;
}
list[low] = list[high]; //比中轴小的记录移到低端
while (low < high && list[low] <= tmp) {
low++;
}
list[high] = list[low]; //比中轴大的记录移到高端
}
list[low] = tmp; //中轴记录到尾
return low; //返回中轴的位置
}
public void sort(int[] list, int low, int high) {
if (low < high) {
int middle = getMiddle(list, low, high); //将list数组进行一分为二
sort(list, low, middle - 1); //对低字表进行递归排序
sort(list, middle + 1, high); //对高字表进行递归排序
}
}
}
说真的没看懂你排序quickSort里的方法,总感觉有问题,你可以改成这样试试
public int getMiddle(int[] list, int low, int high) {
int tmp = list[low]; //数组的第一个作为中轴
while (low < high) {
while (low < high && list[high] >= tmp) {
high--;
}
list[low] = list[high]; //比中轴小的记录移到低端
while (low < high && list[low] <= tmp) {
low++;
}
list[high] = list[low]; //比中轴大的记录移到高端
}
list[low] = tmp; //中轴记录到尾
return low; //返回中轴的位置
}
public void sort(int[] list, int low, int high) {
if (low < high) {
int middle = getMiddle(list, low, high); //将list数组进行一分为二
sort(list, low, middle - 1); //对低字表进行递归排序
sort(list, middle + 1, high); //对高字表进行递归排序
}
}
}
说真的没看懂你排序quickSort里的方法,总感觉有问题,你可以改成这样试试
展开全部
你写的quicksort代码有bug,死循环了,你单步调试看下一吧
追问
死循环?不会吧,那怎么取100以下的都不会有问题呢?说不定在你的机器上就能运行正确,
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
结果不对肯定代码有错,overflow也是代码问题造成,晚上我帮你调一下
更多追问追答
追问
好的,谢谢,好像我用随机数产生就没有错误,因为随机数产生的时候没有负数,只要有负数就会出错。麻烦你了哈
追答
书上都有代码的,直接贴啊,不该贴错的啊你太粗心了
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询