快速排序算法的两种实现

Posted flysavior

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了快速排序算法的两种实现相关的知识,希望对你有一定的参考价值。

一、Java语言实现

package test;

import java.util.Arrays;

/**
 * @author lt
 * @date 2020-05-07 17:15
 * <p>
 * 快速排序
 */
public class QuickSort {

  /**
     * 快速排序
     * @param arr 目标数组
     */
  public static int[] quickSort(int[] arr) {
    // 判断基线条件
    if (arr.length < 2) {
      return arr;
    }
    // 取基准值
    int pivot = arr[0];
    // 这里 .skip() 目的是跳过第一个元素进行筛选
    int[] less = Arrays.stream(arr).skip(1L).filter(num -> num <= pivot).toArray();
    int[] greater = Arrays.stream(arr).skip(1L).filter(num -> num > pivot).toArray();
    // 递归拼接
    return contact(quickSort(less), pivot, quickSort(greater));
  }

  /**
     * 数组 + 数据 + 数组 拼接方法
     *
     * @param arrLess       less数组
     * @param pivot         基准值
     * @param arrGreater    greater数组
     * @return              合并后的数组
     */
  public static int[] contact(int[] arrLess, int pivot, int[] arrGreater) {
    int[] resultArr = new int[arrLess.length + arrGreater.length + 1];
    System.arraycopy(arrLess, 0, resultArr, 0, arrLess.length);
    resultArr[arrLess.length] = pivot;
    System.arraycopy(arrGreater, 0, resultArr, arrLess.length + 1, arrGreater.length);
    return resultArr;
  }

  public static void main(String[] args) {
    int[] tempArr = {4, 6, 8, 1, 2, 9, 5, 3, 7, 7, 2, 29, 14};
    System.out.println(Arrays.toString(quickSort(tempArr)));
  }

}

二、python语言实现

def quicksortfun(arr):
  if len(arr) < 2:
    return arr
  else:
    pivot = arr[0]
    less = [i for i in arr[1:] if i <= pivot]
    greater = [i for i in arr[1:] if i > pivot]

    return quicksortfun(less) + [pivot] + quicksortfun(greater)

以上是关于快速排序算法的两种实现的主要内容,如果未能解决你的问题,请参考以下文章

普通快速排序的两种实现

快速排序的两种实现方法(js)

快速排序算法详解及代码实现

常见的七种排序算法(Java实现)

常见的七种排序算法(Java实现)

常见的七种排序算法(Java实现)