找回密码
 立即注册

扫一扫,访问微社区

QQ登录

只需一步,快速开始

查看: 1830|回复: 2

[求助] 快速排序求助大家看一下哪里不对

0

主题

0

帖子

0

积分

贫民

积分
0
小依依呀呀 发表于 2019-7-23 20:22:30 | 显示全部楼层 |阅读模式
这个排序代码执行之后第二个len长度变成了8

why

why
回复

使用道具 举报

0

主题

8

帖子

8

积分

贫民

积分
8
谢沧行 发表于 2019-7-24 18:26:43 | 显示全部楼层
import time
import random
def quick_sort(data):
    if len(data)>=2:
        mid = data[len(data)//2]
        left,right=[],[]
        data.remove(mid)
        for num in data:
            if num>=mid:
                right.append(num)
            else:
                left.append(num)
        return quick_sort(left) + [mid] + quick_sort(right)
    else:
        return data
a1 = time.perf_counter()
a2 = time.process_time()
brr = []
for i_random in range(1,10):
    brr.append(random.randint(0,9999))

print(brr)
print(len(brr))
brr2 = quick_sort(brr)
print(brr2)
print(len(brr2))

b1 = time.perf_counter()
b2 = time.process_time()
print(b1-a1,'s')
print(b1,a1)



结果
[8076, 8955, 9925, 6669, 7554, 1312, 2632, 2486, 6916]
9
[1312, 2486, 2632, 6669, 6916, 7554, 8076, 8955, 9925]
9
回复 支持 反对

使用道具 举报

0

主题

8

帖子

8

积分

贫民

积分
8
谢沧行 发表于 2019-7-24 18:58:40 | 显示全部楼层
Python不允许程序员选择采用传值还是传引用。Python参数传递采用的肯定是“传对象引用”的方式。实际上,这种方式相当于传值和传引用的一种综合。如果函数收到的是一个可变对象(比如字典或者列表)的引用,就能修改对象的原始值——相当于通过“传引用”来传递对象。如果函数收到的是一个不可变对象(比如数字、字符或者元组)的引用,就不能直接修改原始对象——相当于通过“传值”来传递对象。

因为你data.remove(mid)  这句实际上也改变了你brr 这个数组,因为是引用传递
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表