快速排序的java实现(key的位置可任取)

 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 }

你可能感兴趣的:(java,快速排序)