欢迎光临散文网 会员登陆 & 注册

看雪恶意程序分析与高级对抗技术

2022-10-05 22:46 作者:娜娜络络  | 我要投稿

快速排序

  • 每次将等待排序的数据划分成两部分

  • 递归进行

  • 直到所有数据有序

import java.util.ArrayList;import java.util.Arrays;import java.util.Collection;import java.util.List;import java.util.stream.Collectors;import java.util.stream.Stream;public class QuickSort {    public static void main(String[] args) {        int[] array = {5, 1, 6, 2, 4, 2, 3};        List<Integer> list = quickSort(Arrays.asList(5, 1, 6, 2, 4, 2, 3));        quickSortForInPlace(array);        System.out.println(list);    }    // 分治法(Divide and conquer)需要O(n)的额外空间    public static List<Integer> quickSort(List<Integer> list) {        if (list.size() <= 1) {            return list;        }        List<Integer> left = new ArrayList<>(), pivot = new ArrayList<>(), right = new ArrayList<>();        Integer pivotValue = list.get(0);        for (Integer element : list) {            if (element < pivotValue) {                left.add(element);            } else if (element.equals(pivotValue)) {                pivot.add(element);            } else {                right.add(element);            }        }        return Stream.of(quickSort(left), pivot, quickSort(right)).flatMap(Collection::stream).collect(Collectors.toList());    }    // 原地(in-place)分割版本    public static void quickSortForInPlace(int[] array) {        quickSortPartition(array, 0, array.length - 1);    }    // 对数组中的某个区域进行排序    public static void quickSortPartition(int[] array, int left, int right) {        if (right > left) {            // 将 [left - right] 区域分成了            // [left, pivotIndex - 1] 和 [pivotIndex + 1, right] 两个            int pivotIndex = partition(array, left, right);            quickSortPartition(array, left, pivotIndex - 1);            quickSortPartition(array, pivotIndex + 1, right);        }    }    public static int partition(int[] array, int left, int right) {        // 挑选最右侧的作为基准值        int pivotValue = array[right];        int storeIndex = left;        for (int i = left; i < right; i++) {            if (array[i] <= pivotValue) {                swap(array, i, storeIndex);                storeIndex += 1;            }        }        swap(array, storeIndex, right);        return storeIndex;    }    private static void swap(int[] x, int a, int b) {        int t = x[a];        x[a] = x[b];        x[b] = t;    }}


看雪恶意程序分析与高级对抗技术的评论 (共 条)

分享到微博请遵守国家法律