1 /** 2 * @author 黄志伟 3 */ 4 public class QuickSort { 5 public static void main(String[] args) { 6 int [] array = {49,38,65,97,76,13,13,27,4,8,2,3,56}; 7 quickSort(array, 0, array.length - 1); 8 for (int i = 0; i < array.length; i++) { 9 System.out.println(array[i]); 10 } 11 } 12 13 /** 14 * @param nums 要递归处理的数组 15 * @param left 左边界 begin 0 16 * @param right 右边界 end length-1 17 */ 18 private static void quickSort(int[] nums,int left,int right){ 19 int x = (left+right)/2; 20 int key = nums[x]; 21 int i = left; 22 int j = right; 23 int index = x; 24 //如果长度为一或越界则不需要处理 25 if(left >= right) return; 26 while(i < j){ 27 //左边跳过>=key的一切值 28 while(i < j && nums[j] >= key){ 29 j--; 30 } 31 //右边跳过<key的一切值 32 while(i < j && nums[i] < key){ 33 i++; 34 } 35 //使用index来保存key值所在的数组下标 36 //x的对应值只会不对换或对换一次 37 if(i == x && i != j){ 38 index = j; 39 } 40 if(j == x && i != j){ 41 index = i; 42 } 43 //交换i、j的对应值 44 int tmp = nums[i]; 45 nums[i] = nums[j]; 46 nums[j] = tmp; 47 } 48 //判断i == j(边界)处的值大于还是小于0,划分到不同的地方 49 if(nums[i] < key){ 50 ++i; 51 } 52 int temp = nums[i]; 53 nums[i] = nums[index]; 54 nums[index] = temp; 55 quickSort(nums,left,i-1); 56 quickSort(nums,i+1,right); 57 } 58 }
原文:http://www.cnblogs.com/fcat/p/4644441.html