QuickSort

  快速排序:

 1 package com.wang.sort;
 2 /*
 3  * @tittle:    bubbleSort
 4  * @author:    wwwglin
 5  * @time 2016/04/20
 6  */
 7 
 8 /*
 9  * 思路:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,
10  *              然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。
11  * 时间复杂度:
12  *             最好:O(nlog2n)
13  *             最坏:O(n^2)
14  *             平均:O(nlog2n)
15  * 空间复杂度:O(log2n)
16  */
17         
18 public class QuickSort {
19 
20     public static void quickSort(int[] array) {
21         if (array != null) {
22             quickSort(array, 0, array.length - 1);
23         }
24     }
25 
26     private static void quickSort(int[] array, int beg, int end) {
27         if (beg >= end || array == null)
28             return;
29         int p = partition(array, beg, end);
30         quickSort(array, beg, p - 1);
31         quickSort(array, p + 1, end);
32     }
33 
34     private static int partition(int[] array, int beg, int end) {
35         int last = array[end];
36         int i = beg - 1;
37         for (int j = beg; j <= end - 1; j++) {
38             if (array[j] <= last) {
39                 i++;
40                 if (i != j) {
41                     //不使用额外内存交换两个值,异或运算,同为0 异为1
42                     array[i] = array[i] ^ array[j];
43                     array[j] = array[i] ^ array[j];
44                     array[i] = array[i] ^ array[j];
45                 }
46             }
47         }
48         if ((i + 1) != end) {
49             array[i + 1] = array[i + 1] ^ array[end];
50             array[end] = array[i + 1] ^ array[end];
51             array[i + 1] = array[i + 1] ^ array[end];
52         }
53         return i + 1;
54     }
55 
56     public static void main(String[] args) {
57         int[] nums = { 49, 38, 65, 97, 76, 13, 27, 49 };
58         System.out.println("排序前:");
59         for (int i : nums) {
60             System.out.print(i + ",");
61         }
62         quickSort(nums);
63         System.out.println();
64         System.out.println("排序后:");
65         for (int i : nums) {
66             System.out.print(i + ",");
67         }
68     }
69 }

  参考:http://blog.csdn.net/qarkly112649/article/details/35794097

posted @ 2016-04-20 16:10  wwwglin  阅读(161)  评论(0)    收藏  举报