美文网首页
快速排序算法的两种实现

快速排序算法的两种实现

作者: 愤愤的有痣青年 | 来源:发表于2019-08-16 16:20 被阅读0次

# 在当前数组上排序
def quick_sort(number, i, j):
    if i >= j:
        return

    k1, k2 = i, j
    n = number[i]
    while i < j:
        while i < j and number[j] >= n:
            j -= 1

        number[i] = number[j]

        while i < j and n >= number[i]:
            i += 1

        number[j] = number[i]

    number[j] = n
    quick_sort(number, k1, i-1)
    quick_sort(number, i + 1, k2)

# 不改变原数组使用新数组排序
def quick_sort2(s):
    if len(s) <= 1:
        return s
    n = s[0]
    left, right = [], []
    for i in s[1:]:
        left.append(i) if i < n else right.append(i)

    return quick_sort2(left) + [n] + quick_sort2(right)


s = [1, 45, 3, 889, 343, 12, 34, 5, 654, 243]


# quick_sort(s, 0, len(s) - 1)
s = quick_sort2(s)
print(s)

相关文章

  • 七大排序算法之快速排序

    七大排序算法之快速排序 @(算法笔记)[排序算法, 快速排序, C++实现] [TOC] 快速排序的介绍: 快速排...

  • 数据结构&算法(一)

    一、Java实现快速排序算法 二、Java实现折半插入排序算法 三、Java实现冒泡排序算法

  • Java实现各种常用的排序算法

    Java实现各种常用的排序算法,包括:冒泡排序、插入排序、二分排序、选择排序、希尔排序、堆排序、快速排序(两种写法...

  • 三大排序算法

    归并排序[稳定的排序算法] 递归实现 非递归实现 快速排序[不稳定的排序算法] 堆排序[不稳定的排序算法]

  • 手撕代码 之 快速排序

    1.实现快速排序算法 问题描述给定一个无序数组int[ ] a,使用快速排序算法进行排序。 解题思路对于快速排序,...

  • 剑指offer学习笔记:2.4 算法和数据操作

    2.4 算法和数据操作 重点关注二分查找,归并排序和快速排序。很多算法都有递归和循环两种不同实现方法。通常基于递归...

  • 基础算法|快速排序

    快速排序(Quicksort),是对冒泡排序算法的一种改进。 快速排序算法通过多次比较和交换来实现排序,其排序流程...

  • 常用排序算法(三)

    本篇介绍的两种算法是笔试面试过程中最常考到的两种排序算法,分别是快速排序和堆排序。尤其是快速排序经常会被问及,一方...

  • 快速排序

    手写java版快速排序算法实现

  • 快速排序&快速排序与归并排序的对比

    快速排序算法 快速排序算法是从上到下解决问题使用递归实现,通过巧妙的方式,实现原地排序 分析时间复杂度O(nlog...

网友评论

      本文标题:快速排序算法的两种实现

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