快速排序的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 }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值