码迷,mamicode.com
首页 > 编程语言 > 详细

快速排序

时间:2018-06-03 19:26:35      阅读:153      评论:0      收藏:0      [点我收藏+]

标签:return   个数   span   条件   inf   lis   atm   stat   collect   


通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。

 

技术分享图片

 

例:

private static List<Integer> quicksort(List<Integer> list) {
    if (list.size() < 2) { // 基线条件:为空或只包含一个元素的数组是“有序”的
        // base case, arrays with 0 or 1 element are already "sorted"
        return list;
    } else {
        // recursive case
        // 递归条件
        Integer pivot = list.get(0);

        // sub-array of all the elements less than the pivot
        // 由所有小于基准值的元素组成的子数组
        List<Integer> less = list.stream().skip(1).filter(el -> el <= pivot).collect(Collectors.toList());

        // sub-array of all the elements greater than the pivot
        // 由所有大于基准值的元素组成的子数组
        List<Integer> greater = list.stream().skip(1).filter(el -> el > pivot).collect(Collectors.toList());

        return Stream.of(quicksort(less).stream(), Stream.of(pivot), quicksort(greater).stream())
                .flatMap(Function.identity()).collect(Collectors.toList());
    }
}

public static void main(String[] args) {
    System.out.println(quicksort(Arrays.asList(10, 5, 2, 3))); // [2, 3, 5, 10]
}

 

参考:https://baike.baidu.com/item/%E5%BF%AB%E9%80%9F%E6%8E%92%E5%BA%8F%E7%AE%97%E6%B3%95

快速排序

标签:return   个数   span   条件   inf   lis   atm   stat   collect   

原文地址:https://www.cnblogs.com/ooo0/p/9129822.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!