Chinaunix首页 | 论坛 | 博客
  • 博客访问: 164998
  • 博文数量: 56
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 593
  • 用 户 组: 普通用户
  • 注册时间: 2014-02-18 09:59
文章分类

全部博文(56)

文章存档

2019年(1)

2018年(26)

2016年(1)

2015年(6)

2014年(22)

我的朋友

分类: Java

2014-03-23 21:52:51

1. 轴=(left+right)/2


点击(此处)折叠或打开

  1. /**
  2.  * @author:      吴永行
  3.  * @dateTime:     2014-3-23 下午9:23:30
  4.  * @description:     
  5.  *
  6.  */
  7. package 经典算法大全;

  8. import java.util.Random;

  9. public class _38_快速排序法_2 {

  10.     static final int MAX = 10;

  11.     static final void swap(int[] a, int i, int j) {
  12.         int t;
  13.         t = a[i];
  14.         a[i] = a[j];
  15.         a[j] = t;
  16.     }

  17.     public static void main(String[] args) {
  18.         int number[] = new int[MAX + 1];
  19.         int i, num;
  20.         Random random = new Random();
  21.         System.out.format("排序前:");
  22.         for (i = 0; i < MAX; i++) {
  23.             number[i] = Math.abs(random.nextInt()) % 100;
  24.             System.out.format("%d ", number[i]);
  25.         }
  26.         quicksort(number, 0, MAX - 1);
  27.         System.out.format("\n排序后:");
  28.         for (i = 0; i < MAX; i++)
  29.             System.out.format("%d ", number[i]);
  30.         System.out.format("\n");
  31.     }

  32.     /**
  33.      * @author:      吴永行
  34.      * @dateTime:     2014-3-23 下午9:27:21
  35.      * @description:     
  36.      * @param number
  37.      * @param i
  38.      * @param j
  39.      *
  40.      */
  41.     private static void quicksort(int[] number, int left, int right) {
  42.         int i, j, s;
  43.         if (left < right) {
  44.             s = number[(left + right) / 2];
  45.             i = left - 1;
  46.             j = right + 1;
  47.             while (true) {
  48.                 while (number[++i] < s)
  49.                     ; // 向右找
  50.                 while (number[--j] > s)
  51.                     ; // 向左找
  52.                 if (i >= j)
  53.                     break;
  54.                 swap(number, i, j);
  55.             }
  56.             quicksort(number, left, i - 1); // 对左边进行递回
  57.             quicksort(number, j + 1, right); // 对右边进行递回
  58.         }
  59.     }
  60. }

2. 使用分割的方式


点击(此处)折叠或打开

  1. /**
  2.  * @author:      吴永行
  3.  * @dateTime:     2014-3-23 下午9:32:33
  4.  * @description:     
  5.  *
  6.  */
  7. package 经典算法大全;

  8. import java.util.Random;

  9. public class _39_快速排序法_3 {

  10.     /**
  11.      * @author:      吴永行
  12.      * @dateTime:     2014-3-23 下午9:32:33
  13.      * @description:     
  14.      * @param args
  15.      *
  16.      */

  17.     static final int MAX = 10;

  18.     static final void swap(int[] a, int i, int j) {
  19.         int t;
  20.         t = a[i];
  21.         a[i] = a[j];
  22.         a[j] = t;
  23.     }

  24.     public static void main(String[] args) {
  25.         int number[] = new int[MAX + 1];
  26.         int i, num;
  27.         Random random = new Random();
  28.         System.out.format("排序前:");
  29.         for (i = 0; i < MAX; i++) {
  30.             number[i] = Math.abs(random.nextInt()) % 100;
  31.             System.out.format("%d ", number[i]);
  32.         }
  33.         quicksort(number, 0, MAX - 1);
  34.         System.out.format("\n排序后:");
  35.         for (i = 0; i < MAX; i++)
  36.             System.out.format("%d ", number[i]);
  37.         System.out.format("\n");
  38.     }

  39.     /**
  40.      * @author:      吴永行
  41.      * @dateTime:     2014-3-23 下午9:41:21
  42.      * @description:     
  43.      * @param number
  44.      * @param i
  45.      * @param j
  46.      *
  47.      */
  48.     private static void quicksort(int[] number, int left, int right) {
  49.         int q;
  50.         if (left < right) {
  51.             q = partition(number, left, right);
  52.             quicksort(number, left, q - 1);
  53.             quicksort(number, q + 1, right);
  54.         }
  55.     }

  56.     /**
  57.      * @author:      吴永行
  58.      * @dateTime:     2014-3-23 下午9:42:02
  59.      * @description:     
  60.      * @param number
  61.      * @param left
  62.      * @param right
  63.      * @return
  64.      *
  65.      */
  66.     private static int partition(int[] number, int left, int right) {
  67.         int i, j, s;
  68.         s = number[right];
  69.         i = left - 1;
  70.         for (j = left; j < right; j++) {
  71.             if (number[j] <= s) {
  72.                 i++;
  73.                 swap(number, i, j);
  74.             }
  75.         }
  76.         swap(number, i + 1, right);
  77.         return i + 1;
  78.     }

  79. }








阅读(833) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~