黑马程序员技术交流社区
标题:
快速排序的问题
[打印本页]
作者:
王自强
时间:
2012-10-8 22:47
标题:
快速排序的问题
class QuickSort
{
public static void quickSort(int[] arr,int left,int right)
{
int middle,temp;
int i = left,j = right;
middle = (i+j)/2;
do{
while((arr[i]-arr[middle])<0 && i<right)
i++;
while((arr[j]-arr[middle])>0 && j>left)
j--;
if(i<=j)
{
temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
i++;
j--;
}
}while(i<=j);
if(i<right)
quickSort(arr,i,right);
if(j>left)
quickSort(arr,left,j);
}
public static void main(String[] args)
{
int[] arr = new int[]{22,11,44,66,88,33,0,22,55};
quickSort(arr,0,arr.length-1);
for(int i = 0;i<arr.length;i++)
System.out.println(arr[i]);
}
}
复制代码
这个快速的排序的结果错了,谁能告诉我错哪了吗?谢谢!
作者:
李兆宁
时间:
2012-10-8 22:51
这个代码,很多地方可以优化啊。。
作者:
王震阳老师
时间:
2012-10-8 22:53
为什么今天这么多问关于排序问题的,我看看哦
作者:
林志进
时间:
2012-10-9 00:22
不仅排序有误,输出的数组也被改变了。没有任何注释,看不太懂诶。。{:soso_e154:}
作者:
孙含庆
时间:
2012-10-9 01:08
本帖最后由 孙含庆 于 2012-10-9 01:17 编辑
class QuickSort {
public static void quickSort(int[] arr,int left,int right){
int middle,temp;
int i = left,j = right;
middle = (i+j)/2;
//arr本身就是无序的,这里获取中间的角标要干什么,准备二分查找 ?
do{
while((arr-arr[middle])<0 && i<right)
//还是do while 语句,一进来就移动i 和 j ,这是要干什么,编程思路都猜不透你
i++;
while((arr[j]-arr[middle])>0 && j>left)
j--;
if(i<=j)
//二分查找的思路来排序怎么会排出来
{
temp = arr;
arr = arr[j];
arr[j] = temp;
i++;
j--;
}
}while(i<=j);
if(i<right)
quickSort(arr,i,right);
//这里还递归了,不看了,看完就睡不着了
if(j>left)
quickSort(arr,left,j);
}
public static void main(String[] args) {
int[] arr = new int[]{22,11,44,66,88,33,0,22,55};
quickSort(arr,0,arr.length-1);
for(int i = 0;i<arr.length;i++)
System.out.println(arr);
}
}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2