1.本地0.8b版本

C:\d\models\qw3508q4>ollama run qwen3.5:0.8b --think=false
>>> 用 Python 写一个快速排序

下面是一个简洁的“快速排序”实现(使用原地归并排序 + 递归),并附带说明和扩展建议。

快速排序思路

快速排序通过“分区法”将数组分为两半,时间复杂度为平均 O(n log n)。这里我们采用:

  • 每次选择中间元素作为枢轴
  • 递归地对两边子数组进行快速排序
  • 当数组长度为 1 或 0 时直接返回(终止条件)

Python 代码示例

def quick_sort(arr):
    """原地归并 + 递归的简单快速排序"""

    def merge(left, right):
        # 合并左右两半
        result = []
        i = j = 0

        while i < len(left) and j < len(right):
            if left[i] <= right[j]:
                result.append(left[i])
                i += 1
            else:
                result.append(right[j])
                j += 1

        # 剩余元素直接放入结果中
        while i < len(left):
            result.extend(left[i:])
            i += 1
        while j < len(right):
            result.extend(right[j:])
            j += 1

        return result

    def recursive_sort(arr, low, high):
        if low >= high:
            return arr
        mid = (low + high) // 2
        left_sub = quick_sort(arr, low, mid - 1)
        right_sub = quick_sort(arr, mid, high)
        return merge(left_sub, right_sub)

    return recursive_sort(arr, 0, len(arr))

# 示例
arr = [5, 2, 9, 1, 5, 6]
result = quick_sort(arr)
print("原数组:", arr)      # [5, 2, 9, 1, 5, 6]
print("快速排序结果:", result)  # [1, 2, 5, 5, 6, 9]

运行结果说明:

  • quick_sort 函数会原地修改输入数组,返回 None(实际输出中未打印)。
  • 第一次调用直接按稳定顺序排列了元素(1→2→…)。
    注意:这里使用的是非递归实现;如果是更常见的快速排序算法(如分治 + 堆排序),会更复杂。

进阶说明

如果你希望实现更标准的“标准快速排序”而非原地归并排序,可以考虑:

  • 使用 heapq 构建堆进行分区
  • 递归对左右子数组进行快排
  • 最后比较左右元素顺序即可稳定排序

下面是一个使用 heapq + 递归的版本:

import heapq
from typing import List, Union

def quick_sort(arr: List[Union[int, float]]) -> List[Union[int, float]]:
    # 构建堆并返回根节点(父元素,即枢轴)
    def heapify(arr: List[int], n: int) -> None:
        pivot = arr[len(arr) // 2 - 1] if len(arr) > 0 else arr[0]
        left_count = len(arr) - 1 - (len(arr) // 2 - 1) if len(arr) > 0 else 0

        for i in range(n - 1, n + 1 - left_count, -1):
            pivot = heapq.heappop(arr)
            arr[i] = pivot

            while True:
                if i - 1 >= 0:
                    right_child_idx = i - (left_count + 1)
                    if arr[right_child_idx] > arr[i]:
                        heapq.heappush(arr, arr[i])
                        i -= 1
                    else:
                        break

        # 对左右子树递归并统一处理 pivot 的上下界和长度
        for right in range(len(arr)):
            if i >= len(arr):
                break

            left = arr[i - (left_count + 1) // 2]
            if i - (left_count + 1) // 2 < i:
                heapify(arr, i)

    return quick_sort_heap(arr)


def quick_sort_heap(arr: List[Union[int, float]]) -> List[Union[int, float]]:
    """使用堆和递归的标准快速排序"""
    n = len(arr)
    pivot = arr[n // 2 - 1] if n > 0 else arr[0]

    left = quick_sort_heap(arr[:n // 2])
    right = quick_sort_heap(arr[n // 2 + 1:])

    return merge(left, right)


def quick_sort_heap(a: List, b: List, m: int) -> List:
    """快速排序(合并两个数组)"""
    pivot = a[m - 1] if len(a) > 0 else a[0]

    left = quick_sort_heap(a[:m], a[m + 1 :], m - 1)
    right = quick_sort_heap(a[m + 1 :], a[m + len(a)], m + len(a) - 1)

    return _merge(left, right)


def _merge(left: List, right: List) -> List:
    result = []
    i, j = 0, 0
    while i < len(left) and j < len(right):
        if left[i] <= right[j]:
            result.append(left[i])
            i += 1
        else:
            result.append(right[j])
            j += 1

    return result + left[i:] + right[j:]


if __name__ == "__main__":
    print(quick_sort([5, 2, 9, 1, 5, 6]))
    # 输出大致预期:[1, 2, 5, 5, 6, 9]

使用建议

  • 时间复杂度:平均 O(n log n),最好情况 O(n²);最坏情况下也可归约为 O(n log n)。
  • 空间复杂度:递归时最多 O(n),如果数组非常大,可能需要迭代版本或堆优化。
  • 如果你需要“标准”的快速排序(分治 + 非递归)和合并函数,可以直接参考上面的代码块并替换实现细节。

如果你希望我按特定语言风格、支持更多边界情况(如重复元素、负数),再告诉我你的需求。

实测语法都是错的。

C:\d>python qsort.py
Traceback (most recent call last):
  File "C:\d\qsort.py", line 39, in <module>
    result = quick_sort(arr)
  File "C:\d\qsort.py", line 35, in quick_sort
    return recursive_sort(arr, 0, len(arr))
  File "C:\d\qsort.py", line 31, in recursive_sort
    left_sub = quick_sort(arr, low, mid - 1)
TypeError: quick_sort() takes 1 positional argument but 3 were given

C:\d>python heapq.py
Traceback (most recent call last):
  File "C:\d\heapq.py", line 71, in <module>
    print(quick_sort([5, 2, 9, 1, 5, 6]))
          ~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^
  File "C:\d\heapq.py", line 32, in quick_sort
    return quick_sort_heap(arr)
TypeError: quick_sort_heap() missing 2 required positional arguments: 'b' and 'm'

2.本地2b量化版本

C:\d\models\qw3508q4>\d\llama8\llama-cli -m Qwen3.5-2B-UD-Q4_K_XL.gguf --ctx-size 16384 -cnv
load_backend: loaded RPC backend from C:\d\llama8\ggml-rpc.dll
load_backend: loaded CPU backend from C:\d\llama8\ggml-cpu-zen4.dll

Loading model...


▄▄ ▄▄
██ ██
██ ██  ▀▀█▄ ███▄███▄  ▀▀█▄    ▄████ ████▄ ████▄
██ ██ ▄█▀██ ██ ██ ██ ▄█▀██    ██    ██ ██ ██ ██
██ ██ ▀█▄██ ██ ██ ██ ▀█▄██ ██ ▀████ ████▀ ████▀
                                    ██    ██
                                    ▀▀    ▀▀

build      : b8192-137435ff1
model      : Qwen3.5-2B-UD-Q4_K_XL.gguf
modalities : text

available commands:
  /exit or Ctrl+C     stop or exit
  /regen              regenerate the last response
  /clear              clear the chat history
  /read               add a text file


> 用 Python 写一个快速排序,不用任何额外库

下面是一个使用 Python 实现的快速排序(Quick Sort),不包含任何第三方库:

def quick_sort(arr):
    """
    快速排序,原地排序,不返回新列表
    """
    if len(arr) <= 1:
        return arr

    # 选择中间元素作为基准(pivot),避免最坏情况
    pivot = arr[len(arr) // 2]

    # 初始化左右分区
    left = [x for x in arr if x <= pivot]
    right = [x for x in arr if x > pivot]

    # 递归排序左右分区
    left_sorted = quick_sort(left)
    right_sorted = quick_sort(right)

    # 合并结果
    return left_sorted + right_sorted


if __name__ == "__main__":
    data = [64, 34, 25, 12, 22, 11, 90, 50, 78]
    print("原始数组:", data)
    sorted_data = quick_sort(data)
    print("排序后:", sorted_data)

说明:

  • 使用递归方式对左右两个分区分别调用 quick_sort
  • 选择中间元素作为基准,这样可以在平均情况下避免最坏情况。
  • 整个排序过程在原地完成,没有创建新列表(除了中间结果列表)。
  • 所有逻辑仅使用基础 Python 类型,没有依赖任何外部库。

[ Prompt: 147.7 t/s | Generation: 24.6 t/s ]

C:\d>python qw352bqsort.txt
原始数组: [64, 34, 25, 12, 22, 11, 90, 50, 78]
Traceback (most recent call last):
  File "C:\d\qw352bqsort.txt", line 26, in <module>
    sorted_data = quick_sort(data)
  File "C:\d\qw352bqsort.txt", line 16, in quick_sort
    left_sorted = quick_sort(left)
  File "C:\d\qw352bqsort.txt", line 16, in quick_sort
    left_sorted = quick_sort(left)
  File "C:\d\qw352bqsort.txt", line 16, in quick_sort
    left_sorted = quick_sort(left)
  [Previous line repeated 996 more times]
RecursionError: maximum recursion depth exceeded

语法没错,无限递归。让它修改几次,也都不对。
3.网页版qwen 3.5 plus模型

https://chat.qwen.ai/
用 Python 写一个快速排序

实现快速排序算法
我正在构思一个清晰且易于理解的快速排序实现方案,旨在兼顾代码可读性与效率。
我决定提供两种版本:一种是通过创建新列表实现的直观版本,另一种是原地排序的高效版本,以满足不同场景需求。
在示例中,我会加入详细注释和使用演示,帮助用户快速掌握核心思想与实际应用。
已完成思考

以下是使用 Python 实现的快速排序算法,包括两种常见版本:简洁版(创建新列表)和原地排序版(节省空间),并附有示例和说明,便于理解和使用。

方法一:简洁版(创建新列表)

def quick_sort(arr):
    """
    快速排序 - 简洁版本(创建新列表)
    时间复杂度:平均 O(n log n),最坏 O(n²)
    空间复杂度:O(n)
    """
    if len(arr) <= 1:
        return arr
    
    pivot = arr[len(arr) // 2]  # 选择中间元素作为基准
    left = [x for x in arr if x < pivot]
    middle = [x for x in arr if x == pivot]
    right = [x for x in arr if x > pivot]
    
    return quick_sort(left) + middle + quick_sort(right)

# 示例
arr = [3, 6, 8, 10, 1, 2, 1]
print("简洁版排序结果:", quick_sort(arr))

方法二:原地排序版(节省空间)

def quick_sort_inplace(arr, low=0, high=None):
    """
    快速排序 - 原地版本(不创建新列表)
    时间复杂度:平均 O(n log n),最坏 O(n²)
    空间复杂度:O(log n) - 递归栈
    """
    if high is None:
        high = len(arr) - 1
    
    if low < high:
        pivot_index = partition(arr, low, high)
        quick_sort_inplace(arr, low, pivot_index - 1)
        quick_sort_inplace(arr, pivot_index + 1, high)
    
    return arr

def partition(arr, low, high):
    """分区函数:将小于基准的元素移到左边,大于的移到右边"""
    pivot = arr[high]  # 选择最后一个元素作为基准
    i = low - 1
    
    for j in range(low, high):
        if arr[j] <= pivot:
            i += 1
            arr[i], arr[j] = arr[j], arr[i]
    
    arr[i + 1], arr[high] = arr[high], arr[i + 1]
    return i + 1

# 示例
arr = [3, 6, 8, 10, 1, 2, 1]
print("原地版排序结果:", quick_sort_inplace(arr.copy()))

两种版本对比

特性 简洁版 原地版
空间复杂度 O(n) O(log n)
代码可读性 中等
性能 略慢(创建新列表) 更快(原地操作)
适用场景 学习、小数据 大数据、性能敏感

使用建议

  • 学习或处理小数据时,推荐使用简洁版,代码更直观。
  • 对性能有要求或处理大数据时,建议使用原地版。
  • 对于生产环境,推荐使用 Python 内置的 sorted()list.sort(),其基于 Timsort 算法,性能更优且稳定。
arr = [3, 6, 8, 10, 1, 2, 1]
print("内置排序:", sorted(arr))

这两种实现都展示了快速排序的核心思想,你可以根据具体需求选择使用。

实测两个实现都是正确的。

C:\d>python webqwqsort.py
简洁版排序结果: [1, 1, 2, 3, 6, 8, 10]

C:\d>python webqwqsort2.py
原地版排序结果: [1, 1, 2, 3, 6, 8, 10]

本地版本因为机器性能问题,都没开思考模式,可能也是错误的一个因素。但是根据经验,即使开了思考模式,也有题目理解错误的。

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐