首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python quicksort TypeError

Python quicksort TypeError
EN

Stack Overflow用户
提问于 2018-09-03 19:06:27
回答 2查看 67关注 0票数 0

下面是我的代码抛出的错误:

代码语言:javascript
复制
 File "python", line 39, in <module>
  File "python", line 8, in quicksort
  File "python", line 8, in quicksort
TypeError: unsupported operand type(s) for -: 'NoneType' and 'int'

下面是我的快速排序代码:

代码语言:javascript
复制
#!/usr/bin/python
# -*- coding: utf-8 -*-

def quicksort(arr, beg, end):
    if beg < end:
        pivot = partition(arr, beg, end)
        quicksort(arr, beg, pivot - 1)
        quicksort(arr, pivot + 1, end)

def partition(arr, beg, end):
    left = beg
    right = end
    loc = beg
    while arr[loc] <= arr[right] and loc != right:
        right = right - 1
    if loc == right:
        return loc
    elif arr[loc] > arr[right]:
        (arr[loc], arr[right]) = (arr[right], arr[loc])
        loc = right

    while arr[loc] >= arr[left] and loc != left:
        left = left + 1
    if loc == left:
        return loc
    elif arr[loc] < arr[left]:
        (arr[loc], arr[left]) = (arr[left], arr[loc])
        loc = left

y = [9,7,5,1,5]
quicksort(y, 0, 4)
print(y)
EN

回答 2

Stack Overflow用户

发布于 2018-09-03 19:09:57

你不能从中减去2个变量(Noneint)。

你得到None是因为并非所有partition函数的路径都会返回一些东西。

我在它的末尾添加了一条return语句,这对我来说最有意义:

代码语言:javascript
复制
#!/usr/bin/python
# -*- coding: utf-8 -*-

def quicksort(arr, beg, end):
    if beg < end:
        pivot = partition(arr, beg, end)
        quicksort(arr, beg, pivot - 1)
        quicksort(arr, pivot + 1, end)

def partition(arr, beg, end):
    left = beg
    right = end
    loc = beg
    while arr[loc] <= arr[right] and loc != right:
        right = right - 1
    if loc == right:
        return loc
    elif arr[loc] > arr[right]:
        (arr[loc], arr[right]) = (arr[right], arr[loc])
        loc = right

    while arr[loc] >= arr[left] and loc != left:
        left = left + 1
    if loc == left:
        return loc
    elif arr[loc] < arr[left]:
        (arr[loc], arr[left]) = (arr[left], arr[loc])
        loc = left

    return loc


y = [9,7,5,1,5]
quicksort(y, 0, 4)
print(y)  # >>> [1, 5, 5, 7, 9]

但是,我没有检查每个场景的代码逻辑的正确性。

您可以查看this thread以查看python中快速排序的实现。

票数 2
EN

Stack Overflow用户

发布于 2018-09-03 19:26:13

从函数partition中,您不会返回任何内容。你已经把它赋值给了pivot变量。这就是问题所在。注意你应该返回的值。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52148522

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档