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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

(1)基本思想:选择一个基准元素,通常选择第一个元素或者最后一个元素,通过一趟扫描,将待排序列分成两部分,一部分比基准元素小,一部分大于等于基准元素,此时基准元素在其排好序后的正确位置,然后再用同样的方法递归地排序划分的两部分。
  1. publicclass quickSort {

  2.   inta[]={49,38,65,97,76,13,27,49,78,34,12,64,5,4,62,99,98,54,56,17,18,23,34,15,35,25,53,51};
  3. publicquickSort(){
  4.     quick(a);
  5.     for(int i=0;i<a.length;i++){
  6.        System.out.println(a[i]);
  7.     }
  8. }
  9. publicint getMiddle(int[] list, int low, int high) {  
  10.             int tmp =list[low];    //数组的第一个作为中轴  
  11.             while (low < high){  
  12.                 while (low < high&& list[high] >= tmp) {  
  13.                    high--;  
  14.                 }  

  15.                 list[low] =list[high];   //比中轴小的记录移到低端  
  16.                 while (low < high&& list[low] <= tmp) {  
  17.                     low++;  
  18.                 }  

  19.                 list[high] =list[low];   //比中轴大的记录移到高端  
  20.             }  
  21.            list[low] = tmp;              //中轴记录到尾  
  22.             return low;                   //返回中轴的位置  
  23. }

  24. publicvoid _quickSort(int[] list, int low, int high) {  
  25.             if (low < high){  
  26.                int middle =getMiddle(list, low, high);  //将list数组进行一分为二  
  27.                _quickSort(list, low, middle - 1);       //对低字表进行递归排序  
  28.                _quickSort(list,middle + 1, high);       //对高字表进行递归排序  
  29.             }  
  30. }

  31. publicvoid quick(int[] a2) {  
  32.             if (a2.length > 0) {    //查看数组是否为空  
  33.                 _quickSort(a2,0, a2.length - 1);  
  34.             }  
  35. }
  36. }
复制代码






1347009479_6587.jpg (83.34 KB, 下载次数: 4)

1347009479_6587.jpg

6 个回复

倒序浏览
额   吼吼~~~~
回复 使用道具 举报
第一次见,容我想想
回复 使用道具 举报
斯文阿昊 发表于 2015-10-7 21:18
第一次见,容我想想

推荐两个快排算法的动画演示,帮助理解。
  • http://dwz.cn/1VvzS3
  • http://dwz.cn/1VvC7H
回复 使用道具 举报
说实话, 看完 闷闷哒。 主要是哪里的知识点? 原理是什么啊?这样不是成折半了么?  还有publicvoid quick(int[] a2) 类似语句,应该public  void quick(int[] a2)吧?    publicvoid 感觉有点不习惯哈。
回复 使用道具 举报
最大数放第一个,那LZ的代码可能越界?
回复 使用道具 举报
Synaric 发表于 2015-10-8 08:49
最大数放第一个,那LZ的代码可能越界?

仔细看了下,并不会。。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马