黑马程序员技术交流社区
标题:
写了一个快速排序,但前两个没有排成功,求指点
[打印本页]
作者:
zcbyzcb
时间:
2013-6-24 23:39
标题:
写了一个快速排序,但前两个没有排成功,求指点
class QuickSort
{
public static void quickSort(Integer [] x, int p, int r)//排序函数
{
if(p<r)
{
int q=partition(x,p,r);
quickSort( x, p, q-1);
quickSort(x,q+1,r);
}
}
public static int partition(Integer [] x, int p, int r)//分割函数使该角标左边元素小于该值,右边元素大于该值
{
int i=p,j=r+1;
int temp=x[p];
while(true)
{
while(x[++i]<temp&&i<r)
;
while(--j>temp)
;
if(i>=j)
break;
swap(x,i,j);
}
x[p]=x[j];
x[j]=temp;
return j;
}
public static void swap(Integer [] x, int i, int j)//交换数组的两个元素
{
int temp=x[i];
x[i]=x[j];
x[j]=temp;
}
public static void main(String[] args)
{
Integer []x={5,2,3,1,9,4,6,8};
for(int i=0; i<x.length; i++)
{
System.out.print(x[i]+"--");
if(i==x.length-1)
{
System.out.println("");
}
}
quickSort(x,0,7);
//swap(x,0,1);
for(int i=0; i<x.length; i++)
{
System.out.print(x[i]+"--");
if(i==x.length-1)
{
System.out.println("");
}
}
}
}
复制代码
作者:
vicoooo
时间:
2013-6-25 09:45
while(true)
{
//向右寻找比key大的数
while(i<x.length-1&&x[++i]<key);
//向左寻找比key小的数
while(j>0&&--j>key);
//
if(i>j)
break;
swap(x,i,j);
}
复制代码
现在可以用了。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2