快速排序优化出现内存溢出

来源:1-5 作业解析:使用插入排序法优化快速排序

Simon站起来

2021-02-23 18:18:14

老师我参照您的思路去实现,使用插入排序去优化快速排序,下面是我的代码:

public static  <E extends Comparable<E>> void  sort2(E[] arr){

sort2(arr,0,arr.length-1);
}
private static <E extends Comparable<E>> void sort2(E[] arr,int l,int r){
//只是在这用了插入排序替代了if(l>=r) return;
if(r-l <= 15){
//使用插入排序优化
InsertionSort.sort(arr,0,arr.length-1);
return;
}
int p = partition(arr,l,r);
//这里递归
sort2(arr,l,p-1);
sort2(arr,p+1,r);
}

我这里递归就出现了内存溢出,我参考您的代码,你递归的时候调用的是sort而不是sort2,我代码中有return了,有点想不出原因,麻烦老师看下

写回答

1回答

liuyubobobo

2021-02-24

InsertionSort.sort(arr,0,arr.length-1);


这里相当于是在对整个数组进行了插入排序,而不仅仅是 [l, r] 区间?


还有没有别的问题我也不敢肯定。你可以现在你的环境下运行课程的官方代码,看是否有问题?如果没有问题,请仔细调试跟踪,看自己的代码的问题在哪里?


课程官方代码传送门:https://git.imooc.com/class-105/Play-Algorithms-and-Data-Structures?utm_source=material


继续加油!:)

0
himon站起来
hp>哦,是的我明白了,我对整个数组进行了插入排序的优化,然后就引发了有序数组降低快速排序效率的bug,从而导致栈溢出

h021-02-24
共1条回复

算法与数据结构

波波老师5年集大成之作,算法与数据结构系统学习,考试、面试、竞赛通用

2610 学习 · 1087 问题

查看课程