美文网首页
Java8-style Quicksort

Java8-style Quicksort

作者: shawnliang | 来源:发表于2018-11-25 20:45 被阅读0次

    使用Java8编程风格写的快速排序:

    1、使用数组的版本:

    import java.util.Arrays;
    import java.util.stream.IntStream;
    import java.util.stream.Stream;
    
    public class Java8QuickSort {
        public static void main(String[] args) {
            Java8QuickSort quickSort = new Java8QuickSort();
            int[] initialArray = {2, 1, 3, 5, 6, 6, 7, 7, 7, 454, 321, 3, 3, 2,};
    
            int [] sortedArray = quickSort.sort(initialArray);
    
            System.out.println(Arrays.toString(sortedArray));
        }
    
        private int[] sort(int[] initialArray) {
            if(initialArray.length <= 1) {
                return initialArray;
            }
    
            int pivotIndex = initialArray.length / 2;
    
            int[] smaller = IntStream.of(initialArray).filter(value -> value < initialArray[pivotIndex]).toArray();
            int[] equal = IntStream.of(initialArray).filter(value -> value == initialArray[pivotIndex]).toArray();
            int[] bigger = IntStream.of(initialArray).filter(value -> value > initialArray[pivotIndex]).toArray();
    
    
            return Stream.of(IntStream.of(sort(smaller)), IntStream.of(equal), IntStream.of(sort(bigger)))
                    .reduce(IntStream.empty(), IntStream::concat).toArray();
        }
    }
    

    2、使用容器的版本:

    import java.util.ArrayList;
    import java.util.Collections;
    import java.util.List;
    import java.util.stream.Collectors;
    import java.util.stream.Stream;
    
    public class Java8QuickSort2 {
        public static void main(String[] args) {
            Java8QuickSort2 quickSort = new Java8QuickSort2();
            List<Integer> initialData = List.of(2, 1, 3, 5, 6, 6, 7, 7, 7, 454, 321, 3, 3, 2);
    
            List<Integer> sortedData = quickSort.sort(initialData);
    
            System.out.println(sortedData);
        }
    
        private <T extends Comparable<T>> List<T> sort(List<T> initialData) {
            if (initialData.size() <= 1) {
                return initialData;
            }
    
            int pivotIndex = initialData.size() / 2;
    
            List<T> smaller = initialData.stream().filter(t -> t.compareTo(initialData.get(pivotIndex)) < 0).collect(Collectors.toList());
            List<T> equal = initialData.stream().filter(t -> t.compareTo(initialData.get(pivotIndex)) == 0).collect(Collectors.toList());
            List<T> bigger = initialData.stream().filter(t -> t.compareTo(initialData.get(pivotIndex)) > 0).collect(Collectors.toList());
    
    
            return Stream.of(sort(smaller), equal, sort(bigger))
                    .reduce(Collections.emptyList(), (left, right) -> {
                        List<T> result = new ArrayList<>();
                        result.addAll(left);
                        result.addAll(right);
    
                        return result;
                    });
        }
    }
    

    相关文章

      网友评论

          本文标题:Java8-style Quicksort

          本文链接:https://www.haomeiwen.com/subject/vapuqqtx.html