Python快速排序问题
自己在一边看算法一边用python实现的时候发现这么个问题:
算法导论中的快排:
def quick_sort(array, l, r):
if l < r:
q = partition(array, l, r)
quick_sort(array, l, q - 1)
quick_sort(array, q + 1, r)
def partition(array, l, r):
x = array[r]
i = l - 1
for j in range(l, r):
if array[j] <= x:
i += 1
array[i], array[j] = array[j], array[i]
array[i + 1], array[r] = array[r], array[i+1]
return i + 1
我自己理解后写出来的:
def quickSort(list):
if len(list) <= 1: return list
flag = list[len(list) - 1:]
left = []
right = []
for i in range(len(list) - 1):
if flag[0] > list[i]:
left.append(list[i])
else:
right.append(list[i])
return quickSort(left) + flag + quickSort(right)
如果我写的不是快速排序,那这是个什么(这里使用了额外的内存空间,似乎不是原地排序算法了)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
同一种算法,可以有不同的写法,时空效率也不一样,你这个算是低效的快排。
算法只是描述思路,很多细节是不会规定的,这个需要看实现者的编码水平了。快排有首位交替遍历的算法,也有单向遍历的实现,都叫快排。
你这一句,是打算取list的最后一个元素吗?
貌似这句和下面这句是一样的效果:
那flag就变成标量了。难道是我分析错了?