快速排序

原理:

第一次:从后往前进行查找比较,找到比选中值小的数字进行交换并记录

第二次:从前往后进行查找比较,找到比选中值大的数字进行交换并记录

PS:(在low(左侧索引) < high(右侧索引) 的情况下进行)

这里写图片描述

进行一次循环后,分离左右部分后,分别进行递归操作

这里写图片描述

代码:

import java.util.Arrays;

/**
 * create by frank
 * on 2017/01/11
 * 时间复杂度 O(NlogN) 空间复杂度O(lgN)
 * 稳定性:不稳定
 * 原地排序
 * 运行效率由概率提供保证
 */
public class QuickSort {


    public static String sort(int[] a, int start, int end) {

        int low = start;
        int high = end;
        int key = a[low];

        while (low < high) {

            //当右边数字比选中值大/等于的时候,不进行交换 high--
            while (low < high && a[high] >= key)
                high--;
            //相反情况,交换位置(key为选中值,本次排列都围绕着他进行,所以他是不动且持久有用的)
            a[low] = a[high];
            a[high] = key;

            //当左边数字比选中值小/等于的时候,不进行交换 low++
            while (low < high && a[low] <= key)
                low++;
            //相反情况,跟上述相同原理
            a[high] = a[low];
            a[low] = key;
        }

        if(low > start)
            //递归,原理就是将选中值左部分进行相同操作
            sort(a,start,low-1);
        if(high < end)
            //同上,右部分
            sort(a,high+1,end);

        return Arrays.toString(a);

    }


    public static void main(String[] args) {
        int[] a = {11, 2, 66, 21, 5, 10, 88, 1, 35};

        System.out.println(QuickSort.sort(a, 0, a.length - 1));

    }
}

结果:

这里写图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值