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

浙公网安备 33010602011771号