黑马程序员技术交流社区
标题:
快速排序 栈溢出问题
[打印本页]
作者:
赵喜平
时间:
2013-4-3 20:24
标题:
快速排序 栈溢出问题
本帖最后由 赵喜平 于 2013-4-3 22:16 编辑
class Arr {
public static void main(String args[])
{
int arr[] = { 5, 3, 8, 2, 0, 9, 1, 7 };//35208179,
quick(arr, 0, (arr.length-1));
printArr(arr);
}
public static void quick(int arr[],int left,int right)
{
/*
* 快速排序是选择一个key值,首先和从最后一个元素从后向前比较,
* 大于最后一个换位置,然后和第一个元素从前往后比较,小于第一个换位置,
* 这样以此类推*/
int temp = getStart(arr,left,right); //此处会标识有栈溢出,这么回事?????????????
quick(arr,left,temp); //??????????、、
quick(arr, temp + 1,right);
}
public static int getStart(int arr[],int left,int right)
{
int i = 0, j = 0, key = 0;
left = i;
right = j;
key = left;
if(arr.length==0) return 0;
while(left < right)
{
while(arr[j] > arr[key])
{
--j;
}
swap(arr,arr[j],arr[key]);
while(arr[i] < arr[key])
{
--j;
}
swap(arr,arr[i],arr[key]);
}
return left;
}
public static void swap(int arr[],int i,int j)
{
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
public static void printArr(int arr[]) {
for (int i : arr)
{
System.out.print(i + " ");
}
System.out.println();
}
}
复制代码
作者:
高新星
时间:
2013-4-3 21:40
下面是我的理解,
这里的18,19形成了无限循环了
下面的主要代码省略
public static void quick(int arr[],int left,int right)
{
/*
* 快速排序是选择一个key值,首先和从最后一个元素从后向前比较,
* 大于最后一个换位置,然后和第一个元素从前往后比较,小于第一个换位置,
* 这样以此类推*/
int temp = getStart(arr,left,right); //left==0,right==6
quick(arr,left,temp); //left==0,temp==0------getStart(arr,0,0)--- quick(arr,0,0)---getStart(arr,0,0) .........无限循环
quick(arr, temp + 1,right);
}
public static int getStart(int arr[],int left,int right)
{
int i = 0, j = 0, key = 0;
left = i; //left==0
right = j; //right==0
key = left;
if(arr.length==0) return 0;
while(left < right) //不执行
{
}
return left; //left==0
}
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2