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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 赵喜平 中级黑马   /  2013-4-3 20:24  /  1468 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 赵喜平 于 2013-4-3 22:16 编辑
  1. class Arr {
  2.         public static void main(String args[])
  3.         {
  4.                 int arr[] = { 5, 3, 8, 2, 0, 9, 1, 7 };//35208179,

  5.                 quick(arr, 0, (arr.length-1));

  6.                printArr(arr);
  7.                
  8.         }
  9.         
  10.         public static void quick(int arr[],int left,int right)
  11.         {
  12.                 /*
  13.                  * 快速排序是选择一个key值,首先和从最后一个元素从后向前比较,
  14.                  * 大于最后一个换位置,然后和第一个元素从前往后比较,小于第一个换位置,
  15.                  * 这样以此类推*/
  16.                 int temp = getStart(arr,left,right);                                                 //此处会标识有栈溢出,这么回事?????????????
  17.                 quick(arr,left,temp);                                                                   //??????????、、
  18.                 quick(arr, temp + 1,right);
  19.         }
  20.         public static int getStart(int arr[],int left,int right)
  21.         {
  22.                 int i = 0, j = 0, key = 0;
  23.                
  24.                 left = i;
  25.                 right = j;
  26.                
  27.                 key = left;
  28.                
  29.                 if(arr.length==0) return 0;
  30.                
  31.                 while(left < right)
  32.                 {
  33.                         while(arr[j] > arr[key])
  34.                         {
  35.                                 --j;
  36.                         }
  37.                         swap(arr,arr[j],arr[key]);
  38.                         
  39.                         while(arr[i] < arr[key])
  40.                         {
  41.                                 --j;
  42.                         }
  43.                         swap(arr,arr[i],arr[key]);
  44.                 }
  45.                
  46.                
  47.                 return left;
  48.         }
  49.         
  50.         public static void swap(int arr[],int i,int j)
  51.         {
  52.                         int temp = arr[i];
  53.                         arr[i] = arr[j];
  54.                         arr[j] = temp;
  55.         }

  56.         public static void printArr(int arr[]) {
  57.                 for (int i : arr)
  58.                 {
  59.                         System.out.print(i + " ");
  60.                 }
  61.                 System.out.println();
  62.         }
  63. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
张熙韬 + 1

查看全部评分

1 个回复

倒序浏览
下面是我的理解,
这里的18,19形成了无限循环了
下面的主要代码省略

  1.     public static void quick(int arr[],int left,int right)
  2.     {
  3.             /*
  4.              * 快速排序是选择一个key值,首先和从最后一个元素从后向前比较,
  5.              * 大于最后一个换位置,然后和第一个元素从前往后比较,小于第一个换位置,
  6.              * 这样以此类推*/
  7.             int temp = getStart(arr,left,right);                    //left==0,right==6
  8.             quick(arr,left,temp);                                                            //left==0,temp==0------getStart(arr,0,0)---  quick(arr,0,0)---getStart(arr,0,0) .........无限循环           
  9.             quick(arr, temp + 1,right);
  10.     }
  11.     public static int getStart(int arr[],int left,int right)
  12.     {
  13.             int i = 0, j = 0, key = 0;
  14.             
  15.             left = i;                                                                                        //left==0
  16.             right = j;                                       //right==0
  17.             
  18.             key = left;
  19.             
  20.             if(arr.length==0) return 0;
  21.             
  22.             while(left < right)                                                                                                                                //不执行
  23.             {
  24.                   
  25.             }
  26.             return left;                                                                                                                                                //left==0
  27.     }
  28.    
复制代码

评分

参与人数 1技术分 +1 收起 理由
张熙韬 + 1

查看全部评分

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