快速排序算法运行显示栈溢出,怎么解决 5

packagequicksort;publicclassQuickSort{publicstaticvoidQuickSort(int[]array,intstart,i... package quicksort;
public class QuickSort { public static void QuickSort(int[] array,int start,int end) { int key=array[start]; int i=start,j; if(start<end) { for(j=start+1;j<=end;j++) if(array[j]<key) { int temp=array[j]; array[j]=array[i+1]; array[i+1]=temp; i++; } } array[start]=array[i]; array[i]=key; QuickSort(array,start,i-1); QuickSort(array,i+1,end); } public static void main(String[] args){ int[]array=new int[]{11,213,134,44,77,78,23,43}; QuickSort(array,0,array.length-1); for(int i=0;i<array.length-1;i++ ) { System.out.println((i+1)+"th:"+array[i]); }}}
展开
 我来答
kd83kdi9
2014-04-03 · TA获得超过123个赞
知道答主
回答量:62
采纳率:100%
帮助的人:41.4万
展开全部
刚运行 QuickSort(array,0,array.length-1);这句的时候,进入函数内部key=11, 然后根据判断条件要找到比key小的数字,但是你的数组为int[]array=new int[]{11,213,134,44,77,78,23,43};没有比11小的,所以循环会直接运行到最后,当退出循环的时候,i变成了8,但是你的数组只有8个元素,对应索引0-7,所以会出现数组越界的情况,楼主应该是编程新手吧,编程强调逻辑能力,要把很多条件综合考虑才可以,否则编写出来的程序会有很多bug。
追问
确实是新手,请教一下,应该怎样修改,要是把11放后面就可以了吗?
追答
不能单纯的把11放到后面就行了,而是你要考虑当出现从第一个数开始后面的数都要比这个数要小的时候会出现的情况,比如现在的情况,会造成i++到8 ,而数组最大索引比8小就会造成程序不正常,所以你需要写出如果这种情况怎么做处理的代码。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式