快速排序

在排序算法中,快速排序的速度首屈一指。其基本思想为:

  • 将待排序的序列的最左边的值设为基准值。
  • 将序列中比基准值小的数据放到基准值左边,比基准值大的数据放到基准值右边。
  • 将左右两部分数据,分别执行第一步和第二步。直到待排序的序列个数为1时停止递归。

代码实现:

public static void quickSort(int[] values, int left, int right){
    // 如果left不小于right,需要排序的序列只有一个元素,方法返回。
    if(left >= right){
        return;
    }

    // 设置最左边的元素为基准点:pivot
    int pivot = values[left];

    // 把需要排序的序列中比pivot大的数放到右边,比pivot小的数放到左边,pivot的下标位置为i
    int i = left;
    int j = right;

    while (j>i){
        while (values[j] >= pivot && j>i){
            j--;
        }
        while (values[i] <= pivot && j>i){
            i++;
        }
        if(j>i){
            int temp = values[i];
            values[i] = values[j];
            values[j]= temp;
        }
    }
    values[left] = values[i];
    values[i] = pivot;

    //对序列中i左边的元素快排
    quickSort(values,left,i-1);
    //对序列中i右边的元素快排
    quickSort(values,i+1,right);

}

快速排序的时间复杂度为O(NlogN) 。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值