A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王自强 中级黑马   /  2012-10-8 22:47  /  1599 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. class QuickSort
  2. {
  3.         public static void quickSort(int[] arr,int left,int right)
  4.         {
  5.                 int middle,temp;
  6.                 int i = left,j = right;
  7.                 middle = (i+j)/2;
  8.                 do{
  9.                         while((arr[i]-arr[middle])<0 && i<right)
  10.                                 i++;
  11.                         while((arr[j]-arr[middle])>0 && j>left)
  12.                                 j--;
  13.                         if(i<=j)
  14.                         {
  15.                                 temp = arr[i];
  16.                                 arr[i] = arr[j];
  17.                                 arr[j] = temp;
  18.                                 i++;
  19.                                 j--;
  20.                         }
  21.                 }while(i<=j);
  22.                 if(i<right)
  23.                         quickSort(arr,i,right);
  24.                 if(j>left)
  25.                         quickSort(arr,left,j);
  26.         }
  27.         public static void main(String[] args)
  28.         {
  29.                 int[] arr = new int[]{22,11,44,66,88,33,0,22,55};
  30.                 quickSort(arr,0,arr.length-1);
  31.                 for(int i = 0;i<arr.length;i++)
  32.                         System.out.println(arr[i]);
  33.         }
  34. }
复制代码
这个快速的排序的结果错了,谁能告诉我错哪了吗?谢谢!

评分

参与人数 1技术分 +1 收起 理由
唐志兵 + 1 赞一个!

查看全部评分

4 个回复

倒序浏览
这个代码,很多地方可以优化啊。。
回复 使用道具 举报
为什么今天这么多问关于排序问题的,我看看哦
回复 使用道具 举报
不仅排序有误,输出的数组也被改变了。没有任何注释,看不太懂诶。。{:soso_e154:}
回复 使用道具 举报
本帖最后由 孙含庆 于 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);                        

        }
}

评分

参与人数 1技术分 +1 收起 理由
唐志兵 + 1 赞一个!

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马