快速排序算法的两种实现

一、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)
上一篇:MYSQL 行转列 Pivot 动态 思路


下一篇:快排&归并