美文网首页
归并排序与快速排序python简洁实现

归并排序与快速排序python简洁实现

作者: 热血大桃子 | 来源:发表于2020-04-07 23:53 被阅读0次
  • 快速排序和归并排序的原理就不多讲,但网上的实现方法都比较繁琐,这里用更简短优美的python来实现上述算法.
#! /usr/bin/env python
# -*- coding: utf-8 -*-

"""
@Author:_defined
@Time:  2020/3/10 16:53
@Description: 
"""


# 实现快速排序和归并排序

def quick_sort(arr: list):
    """
    快速排序,最快O(nlogn), 最坏O(n^2)
    :param arr:
    :type arr:
    :return:
    :rtype:
    """
    if len(arr) < 2:
        return arr
    else:
        privot = arr[0]  # 递归条件
        less = [i for i in arr[1:] if i <= privot]  # 所有小于基准值的元素组成的数组
        greater = [i for i in arr[1:] if i > privot]  # 所有大于基准值得元素组成的数组
        return quick_sort(less) + [privot] + quick_sort(greater)  # 分别递归调用并拼接结果


def merge_sort(arr: list):
    """
    归并排序, 稳定的排序算法,时间复杂度为O(nlogn)
    :param arr:
    :type arr:
    :return:
    :rtype:
    """
    if len(arr) < 2:
        return arr
    mid = len(arr) // 2
    res = []  # 存放结果
    left_arr = merge_sort(arr[:mid])
    right_arr = merge_sort(arr[mid:])
    lp, rp = 0, 0
    while lp < len(left_arr) and rp < len(right_arr):
        if left_arr[lp] <= right_arr[rp]:
            res.append(left_arr[lp])
            lp += 1
        else:
            res.append(right_arr[rp])
            rp += 1
    # 因为left_arr 和 right_arr 的长度不一定一样长,所以执行上一步while循环后,left_arr或者right_arr还有剩余的数据,
    # 而这部分数据已经有序且是比已经放到res中的元素大,因此需要把这边剩余的数据放到res中。
    res.extend(left_arr[lp:])
    res.extend(right_arr[rp:])
    print('left: ', left_arr, '\tright: ', right_arr, '\tres: ', res)
    return res


print('快速排序结果:', quick_sort([1, 3, 4, 2, 9, 7, 5, 7, 8]))
print('归并排序结果:', merge_sort([1, 3, 4, 2, 9, 7, 5, 7, 8]))

相关文章

  • 七大排序算法的 Python

    本文用Python实现了插入排序、希尔排序、冒泡排序、快速排序、直接选择排序、堆排序、归并排序、基数排序。 1、插...

  • 八大排序算法的 Python 实现(转)

    本文用Python实现了插入排序、希尔排序、冒泡排序、快速排序、直接选择排序、堆排序、归并排序、基数排序。 1、插...

  • 排序

    排序 快速排序 归并排序 计数排序 Python实现 理解 详解 稳定:如果a原本在b前面,而a=b,排序之后a仍...

  • Python实现程序员必备之排序算法汇总

    本文用Python实现了快速排序、插入排序、希尔排序、归并排序、堆排序、选择排序、冒泡排序共7种排序算法。 一、快...

  • Datawhale | 编程第6期 Test 3

    排序 1.实现归并排序、快速排序、插入排序、冒泡排序、选择排序、堆排序(选做) 归并排序 快速排序 插入排序 冒泡...

  • Python 实现七大排序算法

    本文用 Python 实现了插入排序、希尔排序、冒泡排序、快速排序、直接选择排序、堆排序、归并排序。 先整体看一下...

  • 归并排序与快速排序python简洁实现

    快速排序和归并排序的原理就不多讲,但网上的实现方法都比较繁琐,这里用更简短优美的python来实现上述算法.

  • JavaScript实现排序算法

    实现了冒泡,选择,插入,快排,希尔,归并 冒泡排序 选择排序 插入排序 快速排序 希尔排序 归并排序

  • Python排序算法有哪几种?

    python排序算法有哪些?python中常见的排序算法有:插入排序、选择排序、冒泡排序、快速排序、归并排序、希尔...

  • 排序算法详细代码实现

    算法分类 算法时间复杂度 选择排序 插入排序 C++实现 Python实现 冒泡排序 Python实现 归并排序 ...

网友评论

      本文标题:归并排序与快速排序python简洁实现

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