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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 棉/mg花/x糖 于 2013-5-26 18:44 编辑

数据结构:用数组实现快速排序算法(已优化)

注意:算法优化不是很理想,希望哪位大神能继续帮着优化!!谢谢^_^

程序源码如下:
  1. package com.yb.ArrayAndString;

  2. import java.io.BufferedReader;
  3. import java.io.IOException;
  4. import java.io.InputStreamReader;

  5. public class QuickSort {
  6.     static int count = 0;
  7.     int partition(int arr[],int i,int j) {                //划分区间
  8.         int temp = arr[i];
  9.         while(i < j) {
  10.             while(i<j && arr[j]>temp) j--;                //从第j所指位置起向前搜索
  11.             if(i < j) {
  12.                 arr[i] = arr[j];
  13.                 i++;
  14.             }
  15.             while(i<j && arr[i]<temp) i++;                //从第i所指位置起向后搜索
  16.             if(i < j) {
  17.                 arr[j] = arr[i];
  18.                 j--;
  19.             }
  20.         }
  21.         arr[i] = temp;
  22.         return i;
  23.     }
  24.     void quickSort(int arr[],int low,int high) {          //快速排序方法
  25.         int p;
  26.         if(low < high) {
  27.             p = partition(arr,low,high);                  //做一次划分排序
  28.             quickSort(arr,low,p-1);                       //左区间递归
  29.             quickSort(arr,p+1,high);                      //右区间递归
  30.             count++;
  31.         }
  32.     }

  33.     public static void main(String[] args) throws IOException {
  34.         // TODO Auto-generated method stub
  35.         BufferedReader keyin = new BufferedReader(new InputStreamReader(System.in));
  36.         String ch;
  37.         int arr[] = new int[8];
  38.         int len = arr.length;
  39.         System.out.println("请从键盘输入8个整数,一行只输入一个数:");
  40.         for(int i = 0; i < len; i++) {
  41.             ch = keyin.readLine();                         //用于读取一个字符串
  42.             arr[i] = Integer.parseInt(ch);                 //将字符串类型ch转换成整数类型
  43.         }

  44.         //打印原始数据
  45.         System.out.println("原始数据:");
  46.         for(int i = 0; i < len; i++) {
  47.             System.out.print(" "+arr[i]);
  48.         }
  49.         System.out.println("\n");

  50.         QuickSort p = new QuickSort();
  51.         p.quickSort(arr,0,len-1);

  52.         //打印排序结果
  53.         System.out.println("快速排序法的结果:");
  54.         for(int i = 0; i < len; i++) {
  55.             System.out.print(" "+arr[i]);
  56.         }
  57.         System.out.println("\n");
  58.         System.out.println("排序趟数:"+count);
  59.     }
  60. }
复制代码
运行结果:



评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 很给力!

查看全部评分

6 个回复

倒序浏览
整体的逻辑没有问题,具体的细节可以多想想各种可能出现不正常的情况如何进行处理。。。
回复 使用道具 举报
赵崇友 发表于 2013-5-26 22:46
整体的逻辑没有问题,具体的细节可以多想想各种可能出现不正常的情况如何进行处理。。。 ...

是哦,不过我现在还一下子想不到,你有没好的idea啊,参考参考啊.........

目前能力有限,异常情况的处理也不是很好.......想不到太深
回复 使用道具 举报
另外把工具类和测试类分开写比较好些,工具类中的方法最好是定义成静态的。处理异常时, 在给用户用时要考虑各种情况的出现并给出有好提示。比如:用户输入的不是数字、输入的数字不是整数等各种情况。
回复 使用道具 举报
棉/mg花/x糖 发表于 2013-5-26 22:49
是哦,不过我现在还一下子想不到,你有没好的idea啊,参考参考啊.........

目前能力有限,异常情况的处 ...

不知道你流程走完了没有,这个代码优化以后会讲到的。。别太在意,主要是逻辑清晰就ok了。。
回复 使用道具 举报
赵崇友 发表于 2013-5-26 23:12
不知道你流程走完了没有,这个代码优化以后会讲到的。。别太在意,主要是逻辑清晰就ok了。。 ...

嗯,很不错的建议呀,谢谢了哈。你的流程是不是走完了啊?
我还不行,只走了一半啊,只得准备21期了~~~~~
回复 使用道具 举报
棉/mg花/x糖 发表于 2013-5-27 09:58
嗯,很不错的建议呀,谢谢了哈。你的流程是不是走完了啊?
我还不行,只走了一半啊,只得准备21期了~~~~~ ...

嗯嗯,我申请的20期的,流程走完了!!你要好好努力呀,早点准备21期的,早点面试,不要拖到最后,不然很可能最后没有名额了,又呆等下一期了!!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马