public class QuickSort
{
public static int[] Data={4,6,2,9,5,1,7,3};
public static void main(String []args)
{
int i;
int index;
index=Data.length;
System.out.print("Before Quick Sorting: ");
for(i=0;i<index;i++)
{
System.out.print(" "+Data[i]+ " ");
}
System.out.println("");
QuickSort(0,index-1,index);
System.out.print("After Quick Sorting : ");
for(i=0;i<index;i++)
{
System.out.print(" "+Data[i]+" ");
}
System.out.println("");
}
public static void QuickSort(int leftP,int rightP,int index)
{
int i,j,k;
int pivot;
int temp;
i=leftP; //左指针
j=rightP+1; //右指针
pivot=Data[leftP]; //取最左边的元素
if(i<j)
{
do
{
do //从左往右找比pivot大的值
{
i++;
}while(Data[i]<=pivot && i<=rightP);
do //从右往左找比pivot小的值
{
j--;
}while(Data[j]>=pivot && j>leftP);
if(i<j) //交换Data[i]和Data[j]
{
temp=Data[i];
Data[i]=Data[j];
Data[j]=temp;
}
if(i>j)
{
temp=Data[leftP];
Data[leftP]=Data[j];
Data[j]=temp;
}
}while(i<j);
System.out.print("Current sorting result : ");
for(k=0;k<index;k++)
{
System.out.print(" "+Data[k]+" ");
}
System.out.println("");
QuickSort(leftP,j-1,index); //排序左半边
QuickSort(j+1,rightP,index); //排序右半边
}
}
}Before Quick Sorting: 4 6 2 9 5 1 7 3
Current sorting result : 1 3 2 4 5 9 7 6
Current sorting result : 1 3 2 4 5 9 7 6
Current sorting result : 1 2 3 4 5 9 7 6
Current sorting result : 1 2 3 4 5 9 7 6
Current sorting result : 1 2 3 4 5 9 7 6
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 8
at QuickSort.QuickSort(QuickSort.java:46)
at QuickSort.QuickSort(QuickSort.java:72)
at QuickSort.QuickSort(QuickSort.java:72)
at QuickSort.main(QuickSort.java:19)
Press any key to continue...怎么右边没排?还抱错,我哪里写错了啊~~~~
{
public static int[] Data={4,6,2,9,5,1,7,3};
public static void main(String []args)
{
int i;
int index;
index=Data.length;
System.out.print("Before Quick Sorting: ");
for(i=0;i<index;i++)
{
System.out.print(" "+Data[i]+ " ");
}
System.out.println("");
QuickSort(0,index-1,index);
System.out.print("After Quick Sorting : ");
for(i=0;i<index;i++)
{
System.out.print(" "+Data[i]+" ");
}
System.out.println("");
}
public static void QuickSort(int leftP,int rightP,int index)
{
int i,j,k;
int pivot;
int temp;
i=leftP; //左指针
j=rightP+1; //右指针
pivot=Data[leftP]; //取最左边的元素
if(i<j)
{
do
{
do //从左往右找比pivot大的值
{
i++;
}while(Data[i]<=pivot && i<=rightP);
do //从右往左找比pivot小的值
{
j--;
}while(Data[j]>=pivot && j>leftP);
if(i<j) //交换Data[i]和Data[j]
{
temp=Data[i];
Data[i]=Data[j];
Data[j]=temp;
}
if(i>j)
{
temp=Data[leftP];
Data[leftP]=Data[j];
Data[j]=temp;
}
}while(i<j);
System.out.print("Current sorting result : ");
for(k=0;k<index;k++)
{
System.out.print(" "+Data[k]+" ");
}
System.out.println("");
QuickSort(leftP,j-1,index); //排序左半边
QuickSort(j+1,rightP,index); //排序右半边
}
}
}Before Quick Sorting: 4 6 2 9 5 1 7 3
Current sorting result : 1 3 2 4 5 9 7 6
Current sorting result : 1 3 2 4 5 9 7 6
Current sorting result : 1 2 3 4 5 9 7 6
Current sorting result : 1 2 3 4 5 9 7 6
Current sorting result : 1 2 3 4 5 9 7 6
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 8
at QuickSort.QuickSort(QuickSort.java:46)
at QuickSort.QuickSort(QuickSort.java:72)
at QuickSort.QuickSort(QuickSort.java:72)
at QuickSort.main(QuickSort.java:19)
Press any key to continue...怎么右边没排?还抱错,我哪里写错了啊~~~~
解决方案 »
- 自学编程从零基础 打算学JAVA方向,一直到安卓开发需要看那些书和视频?求高手指点几句
- 为什么我的ORB.init();不能实例化
- socket长连接编程应该注意哪些?
- 如何确定一个对象在他所在数组的下标(在线等)
- 大家学习一门语言需要多少时间?
- 【不是广告】帮朋友发,欲转让《Java思想》第三版,9成新,4折,最好是南京朋友!mail:[email protected]
- 请问 这个异常可能是什么造成的?
- 用javaMail发邮件的问题
- wangwenyou(王文友)、alphazhao(绿色咖啡)、zmrljl(javaone)三位兄弟请进
- 一个简单的java.util.Vector类函数使用问题
- 求有关applet的电子书籍
- 我的jxl.jar怎么不能引用?
while (Data[i] <= pivot && i <= rightP);
这句有问题,当i=7时,程序继续执行i++,再次到Data[i]<=pivot就变成Date[8]<=pivot
当然会报错,写程序不要写连自己都难以调试的程序,对你以后的维护没有什么好处