qwen 3.5大小模型编程能力对比
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]
本地版本因为机器性能问题,都没开思考模式,可能也是错误的一个因素。但是根据经验,即使开了思考模式,也有题目理解错误的。
更多推荐



所有评论(0)