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

快速排序算法的两种实现

时间:2020-05-08 09:32:27      阅读:66      评论:0      收藏:0      [点我收藏+]

标签:实现   ack   author   fun   class   ring   date   @param   main   

一、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)

快速排序算法的两种实现

标签:实现   ack   author   fun   class   ring   date   @param   main   

原文地址:https://www.cnblogs.com/flySavior/p/12848371.html

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