Java排序-快速排序

 

/**
 * 快速排序
 * 假设我们现在对“6  1  2  7  9  3  4  5  10  8”这个10个数进行排序。
 * 首先在这个序列中随便找一个数作为基准数。
 * 为了方便,就让第一个数6作为基准数吧。
 * 接下来,需要将这个序列中所有比基准数大的数放在6的右边,
 * 比基准数小的数放在6的左边,类似下面这种排列:3  1  2  5  4  6  9  7  10  8
 * 在初始状态下,数字6在序列的第1位。
 * 我们的目标是将6挪到序列中间的某个位置,假设这个位置是k。
 * 现在就需要寻找这个k,并且以第k位为分界点,左边的数都小于等于6
 * ,右边的数都大于等于6,以此类推。
 * @param data
 * @param left
 * @param right
 */
public static void quickSort(int[] data ,int left,int right){
    if(left >= right)
        return;
    //设置左边第一个元素为基准数
    int base = data[left];
    int i = left,j = right;
    while(i != j) {
        // 查找右边小于基准数
        while (data[j] >= base && i < j) {
            j--;
        }

        // 查找左边大于基准数
        while (data[i] <= base && i < j) {
            i++;
        }

        if (i < j) {
            swap(data,i,j);
        }
    }
    //基准数归位
    data[left] = data[i];
    data[i] = base;
    quickSort(data,left,i-1);
    quickSort(data, i + 1, right);
}

参考文章:http://ahalei.blog.51cto.com/4767671/1365285

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值