当前位置: 代码迷 >> J2SE >> 【Java不懂就问!求教】 快速排序 递归算法的实现中发现的有关问题
  详细解决方案

【Java不懂就问!求教】 快速排序 递归算法的实现中发现的有关问题

热度:20   发布时间:2016-04-23 19:55:53.0
【Java不懂就问!求教】 快速排序 递归算法的实现中发现的问题
快速排序 递归算法代码实现如下
那么问题来了:
楼主经过debug,得出:先进行第一次分组,得出第一个middle值,
之后不断的调用_quickSort(list, low, middle - 1);对低字表进行递归排序.
直到if(low < high)条件语句不成立(这是完成对低字表的排序).
问题就出现在这,if条件语句判断为false时,这时为什么还要执行if(){}
内的_quickSort(list,middle + 1, high); 这部分代码?还有这时执行这个方
法时,参数取值的来源是什么?

1.public class quickSort { 


2. int a[]={49,38,18,23,34,15,35,25,53,51}; 


3.public quickSort(){ //构造方法


4. quick(a); 


5. for(int i=0;i<a.length;i++){ 


6. System.out.println(a[i]); 








7. public int getMiddle(int[] list, int low, int high) { 
8. int tmp =list[low]; //数组的第一个作为中轴 


9. while (low < high){ 


10. while (low < high&& list[high] >= tmp) { 


11. high--; 








12. list[low] =list[high]; //比中轴小的记录移到低端 


13. while (low < high&& list[low] <= tmp) { 


14. low++; 








15. list[high] =list[low]; //比中轴大的记录移到高端 





16. list[low] = tmp; //中轴记录到尾 


17. return low; //返回中轴的位置 








18. public void _quickSort(int[] list, int low, int high) { 


19. if (low < high){ 


20. int middle =getMiddle(list, low, high); //将list 数组进行一分





21. _quickSort(list, low, middle - 1); //对低字表进行递归排





22. _quickSort(list,middle + 1, high); //对高字表进行递归排序 




public void quick(int[] a2) { 
if (a2.length > 0) { //查看数组是否为空 
_quickSort(a2,0, a2.length - 1); 


public static void main(String[] args) {//主方法
quickSort q=new quickSort();

}
}
------解决思路----------------------
恩对,是非常常见的哦,能用到递归大部分是因为使用了分治法,就是把大任务分成相同的几个小任务,代码都是类似于这样的~
  相关解决方案